Создание собственной библиотеки на основе исходной библиотеки в 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 В классе еще нет полей с одинаковыми именами. Больше на наследство.

Другие вопросы по тегам