Создание собственной библиотеки на основе исходной библиотеки в Visual Studio C#
Я понимаю, что есть некоторые методы, которые не поддерживаются существующей библиотекой, т.е. System.Windows.Forms.DataVisualization.Charting. Например, если я хочу, чтобы серия отображала значения x, y, включая такие параметры, как приращения по x.
Как я мог добавить еще один метод перегрузки в существующую Системную библиотеку, Мой руководитель упомянул общую технику, называемую шаблоном Фасад, а также шаблоном Адаптера, но я действительно не имею ни малейшего понятия, как справиться с этими вещами.
Спасибо
Мой способ решения этой проблемы - создать свой собственный класс, унаследовать эти библиотеки... но потом я понимаю, что работа слишком тяжелая, потому что все коды, созданные Windows Forms, используют библиотеку из System, а не мою библиотеку... например, this.chart1 = new System.Windows.Forms.DataVisualization.Charting.Chart(); они используют Charting.Chart. Если я создам свой собственный класс диаграмм с именем Mychart, мне придется заменить каждую диаграмму на mychart..... Как можно избежать этого?
В любом случае, добавлять новые методы перегрузки в библиотеку Microsoft, не делая слишком много работы?
2 ответа
Рассматривали ли вы использовать методы расширения?
Методы расширения предоставляют вам возможность добавить функциональность в существующую сборку без изменения этой сборки. Вы можете добавить перегруженный метод, не изменяя исходную сборку и не изменяя существующий в данный момент код, использующий эту сборку.
Обратите внимание, что существуют ограничения для методов расширения.
Если вы хотите добавить новый перегруженный метод расширения к System.Windows.Forms.DataVisualization.Charting.Chart
класс, то вы можете попробовать что-то вроде этого:
Добавьте статический класс в ваш проект, который будет содержать методы расширения:
public static class ChartExtensions
{
public static void Show(this Chart chart, bool includeIncrements)
{
// Do your modifications to the chart here ...
chart.Show();
}
}
Теперь вы можете использовать новый метод с обычными объектами диаграммы:
Chart chart1 = new Chart(); // <-- Normal chart object
//chart1.Show(); // <-- standard chart method
chart1.Show(true); // <-- your new overloaded method
РЕДАКТИРОВАТЬ: Не уверен, что именно то, что вы хотите. Может быть, что-то подобное?
public static class DataPointCollectionExtension
{
// Adds a new point to the end of the collection, with a spedified y and
// a value of x that is dx larger than the last value.
public static void AddDXY(this DataPointCollection points, double dx, double y)
{
double x = 0.0; // Default starting x if there are no points in the collection.
if (points.Count() > 0) { x = points.Last().XValue + dx; }
points.Add(new DataPoint(x, y));
}
}
Тогда используйте как это:
chart1.Series[0].Points.AddDXY(0.5, 5.2);
chart1.Series[0].Points.AddDXY(0.5, 4.2);
chart1.Series[0].Points.AddDXY(1.0, 6.2);
chart1.Series[0].Points.AddDXY(0.7, 4.8);
Если вы хотите использовать наследование в этом конкретном случае, вы бы создали класс, который расширяет System.Windows.Forms.DataVisualization.Charting
как это.
public class MyCharting : System.Windows.Forms.DataVisualization.Charting
{
}
Тогда вы бы взяли части Charting
что вы хотите по-другому и override
методы, которые вы хотите изменить свое первоначальное поведение. Вы не сможете сделать это с любым методом только для virtual
из них.
Что касается дополнительных функций, таких как добавление дополнительных свойств и полей, вы можете сделать это без проблем, пока base
В классе еще нет полей с одинаковыми именами. Больше на наследство.