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

我知道这是胡说八道,但我尝试了很多解决方案,但没有一个有效:-(

C# 泛型方法重载

您正在创建Factory<T>的实例,而不是FactoryFactory<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()时引发异常。