C# 泛型方法重载
本文关键字:重载 泛型方法 | 更新日期: 2023-09-27 18:34:48
我对 C# 泛型有问题。我需要在 PCL 中做这样的事情。
class Factory<T> : IFactory<T>
{
T Create()
{
throw new NotSupportedException();
}
}
class Factory : IFactory<MyClass>
{
MyClass Create()
{
return new MyClass();
}
}
//In some method ....
IFactory<MyClass> factory = new Factory<MyClass>();
MyClass variable = factory.Create(); //This throw NotSupportedException
我知道这是胡说八道,但我尝试了很多解决方案,但没有一个有效:-(
您正在创建Factory<T>
的实例,而不是Factory
。 Factory<T>.Create
引发异常,因此您看到的行为是正常的。
您应该使用 Factory
而不是 Factory<T>
。
另一种选择是在Factory<T>
T
上添加new
约束:
class Factory<T> : IFactory<T> where T : new()
{
public T Create()
{
return new T()
}
}
Factory<T>
类在您的示例中没有任何用途,因为您的Factory
直接从IFactory<T>
继承。如果你要这样做,你可以删除第一个类,然后这样做:
IFactory<MyClass> factory = new Factory();
MyClass variable = factory.Create();
您收到异常的原因是您正在创建 Factory<T>
的实例,并且该实例被定义为在调用.Create()
时引发异常。