如何沿边基类实现约束泛型

时间:2021-07-24 19:23:41

标签: c# generics

假设我有一个实现 internal class BaseClass: INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; internal void OnPropertyChanged(string property) { // Logic... } }

的基类
OnPropertyChanged

当然,任何继承基类的类都可以毫无问题地使用 OnPropertyChanged 方法。

当我开始使用受约束的泛型时,我的问题就开始了。一旦我将泛型约束到任何指定的接口,派生类就不能再使用 internal class DerivedClass<T> where T: BaseClass, IComparable { private void DoSomething() { // Logic... OnPropertyChanged("FooBar"); // The name 'OnPropertyChanged' does not exist in the current context } } 方法。

- Products
    -Categoria
        -riga1
        -riga2
        -riga3

我想知道什么样的实现可以让我将 Generic 限制为一个接口而不限制基类的使用。但是,如果不可能,有什么线索可以说明原因吗?

1 个答案:

答案 0 :(得分:1)

这里不是从 BaseClass 派生的,所以当然不能访问类方法。您需要在将用于实例化 DerivedClass 的类型 T 的实例上调用该方法,如下所示:

public class DerivedClass<T> where T: BaseClass, IComparable
{ 
   T _t;

    public DerivedClass(T t)
    {
      _t = t;
    }
    private void DoSomething()
    {
        // Logic...
        _t.OnPropertyChanged("FooBar"); 
    }
  }

也许你真正要找的东西是这样的:

public class DerivedClass<T> : BaseClass where T: IComparable

这将做你想做的,同时仍然限制类型。