У меня есть несколько элементов управления * .ascx.Каждый из них представляет элемент управления Microsoft Chart, но разные типы диаграмм.Все эти диаграммы предоставляют несколько методов с одинаковой функциональностью, поскольку все они реализуют интерфейс IChartControl.Я ненавижу тот факт, что есть случаи, когда реализация каждой диаграммы идентична - код копируется / вставляется.
Я решил, что они реализуют интерфейс IChartControl, потому что я не смог найти решение разумной сложности, которое позволило бы этим элементам управления диаграммой использовать те же функции.Наследование базового класса Chart оказалось чрезвычайно сложным в том смысле, что вы не можете на самом деле наследовать разметку HTML за элементами управления.
Я хотел бы сделать следующее:
Подпись дляодин из классов такой:
public partial class HistoricalLineGraph : System.Web.UI.UserControl, IChartControl
Я хотел бы создать новый класс, который наследуется от System.Web.UI.UserControl.Этот класс будет реализовывать интерфейс IChartControl.Таким образом, я мог бы предоставить базовую реализацию для методов, которые я хочу определить, но я столкнулся с загадкой.Посмотрите на следующий метод, который я хотел бы абстрагировать до более высокого уровня, чтобы код наследовался всеми моими классами построения диаграмм:
public void LoadData(string data)
{
if (!string.IsNullOrEmpty(data))
{
byte[] dataAsArray = System.Text.Encoding.UTF8.GetBytes(data);
MemoryStream stream = new MemoryStream(dataAsArray);
Chart1.Serializer.Load(stream);
}
}
Класс среднего уровня между HistoricalLineGraph и System.Web.UI.UserControl не будет иметь понятия об объекте 'Chart1', как он определен в HistoricalLineGraph.
Есть ли очевидное решение этой проблемы, которое мне не хватает?
РЕДАКТИРОВАТЬ: Я хотел бычтобы иметь возможность что-то делать со свойствами, определенными в интерфейсе IChartControl.Если я передаю элемент управления 'Chart' в качестве параметра вышеупомянутой функции, каким будет решение для приведенной ниже функции?
public string Title
{
get { return Chart1.Titles[1].Visible ? Chart1.Titles[1].Text : Chart1.Titles[0].Text; }
set { Chart1.Titles[0].Text = value; }
}