我有这样的事情:
abstract class BaseClass<T>
{
protected BaseClass(){}
}
class Class1 : BaseClass<Class1>
{
public static Class1 Instance = new Class1();
private Class1(){}
}
class Class2 : BaseClass<Class2>
{
public static Class2 Instance = new Class2();
private Class2(){}
}
...
public BaseClass<T> Method<T>(int z) where T: BaseClass<T>
{
switch(z)
{
case 1:
return Class1.Instance;
case 2:
return Class2.Instance;
}
}
非常重要的是,这些类无法实例化,因为他们的委托人是私人的,所以我们不能这样做
public BaseClass<T> Method<T>(int z) where T: BaseClass<T>,
new()
如何使用抽象类作为返回类型?我无法解决这个问题。非常感谢这里的任何帮助。
答案 0 :(得分:2)
听起来我觉得你的方法不可能是通用的。例如,如果我打电话会发生什么:
BaseClass<Class1> foo = Method<Class1>(2);
您需要一个单一的事实 - 无论是类型参数还是普通参数。您可以通过使用非泛型基类(通过使现有基类非泛型,或者向其引入非泛型基类)使其成为方法参数。将Method
的返回类型更改为此非泛型基类。
答案 1 :(得分:0)
abstract class BaseClass<T>
{
public abstract T Instance { get; }
protected BaseClass(){}
}
可能?你不能继承我认为的静态东西......
仔细看看......我不认为你想做的事情甚至可能......你还想做什么呢?
类型约束是类型约束。您正在尝试更改方法类型中的类型约束。这显然不起作用,不应该工作。我认为你需要考虑一种不同的攻击方式。无论是什么......
答案 2 :(得分:0)
看看factory pattern。你的工厂可以有一个方法来获取实例。第一次调用它时,它会创建实例。在后续调用中,它可以返回已经创建的实例。