假设我有一个实现 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 限制为一个接口而不限制基类的使用。但是,如果不可能,有什么线索可以说明原因吗?
答案 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
这将做你想做的,同时仍然限制类型。