Использование абстрактного класса с общими параметрами в INotifyPropertyChanged object

#c# #generics #casting #scichart

#c# #универсальные #Кастинг #scichart

Вопрос:

Я пытаюсь присоединить общие / абстрактные серии данных к объекту INotifyPropertyChanged. Однако, похоже, что обобщения TX, TY не позволяют мне использовать его, как ожидалось. Кто-нибудь может мне помочь?

Дополнительная информация об абстрактном классе:https://www.scichart.com/documentation/v5.x/webframe.html#SciChart.Построение диаграмм ~ SciChart.Построение графиков.Модель.Серии данных.DataSeries`2.html

 internal class DataSeriesAbstract : INotifyPropertyChanged
{
    public string dataName;
    public double lastAppendedTimestamp = 0.0f;

    public List<AbstractChartViewModel> subscribers;

    // gives an error that TX and TY cannot be found
    public DataSeries<TX, TY> realData;
    public DataSeries<TX, TY> Data
    {
        get { return realData; }
        set
        {
            realData = value;
            OnPropertyChanged(dataName);
        }
    }
...
}
  

Спасибо,

Майк

Ответ №1:

Вашему классу также потребуется предоставить общие параметры. Это изменило бы ваше объявление класса следующим образом:

 internal class DataSeriesAbstract<TX, TY> : INotifyPropertyChanged where TX : IComparable where TY : IComparable
  

Ограничения where будут иметь решающее значение, если вы сделаете это, потому что DataSeries имеет те же ограничения.

Теперь, если вы знаете конкретные типы для вашего ряда данных, вы можете просто использовать это вместо TX, TY. Например:

 public DataSeries<double, double> realData;
public DataSeries<double, double> Data
  

Ответ №2:

Как минимум, вам нужно будет добавить их в качестве универсальных параметров в класс плюс любые ограничения

 internal class DataSeriesAbstract<TX, TY>: INotifyPropertyChanged
{
   ...
  

Дополнительные ресурсы

Универсальные классы (руководство по программированию на C #)