我在这里卡住了,这是我的代码的现有结构:是否有可能将泛型基类的继承实例化为父类的类型?
public abstract class AbstractInterface { }
public abstract class paramBase { }
public class paramUser : paramBase { }
public class paramServer : paramBase { }
public abstract class BaseInterface<Tparam> : AbstractInterface where Tparam : paramBase
{
//do something
}
public class UserInterface : BaseInterface<paramUser>
{
//do Something
}
public class ServerInterface : BaseInterface<paramServer>
{
//do something
}
现在我想另一个类的变量设置为一个特定的接口类型
public class A
{
protected BaseInterface<paramBase> CurrentInterface;
protected void Initialize()
{
CurrentInterface = new UserInterface();
//This fails
BaseInterface CurrentInterface_2 = new UserInterface();
//Fails as well, because BaseInterface requires 1 type argument
}
}
所以我的问题是,如果有办法,甚至可以这样做。 我想生成新的接口,如ServerInterface或ClientInterface等等,它们都从BaseInterface继承。他们每个人在创作上都有不同的参数,这就是为什么我将他们转移到个人课堂上的原因。
所以我不想有什么
BaseInterface<paramUser> CurrentInterface = new UserInterface();
其中一期工程,因为我不能设置CurrentInterface到ServerInterface(这需要paramServer)了。
如果这是不可行的,我会很乐意提供关于如何处理这个问题的任何建议。
如果'BaseInterface'被定义为[covariant](https://msdn.microsoft.com/en-us/library/ee207183.aspx),那么第一次尝试就可以工作,但要做到这一点只需要泛型类型被用作输出,所以它取决于在BaseInterface上定义了什么方法/属性 –
第二次尝试不会 - 没有定义的BaseInterface接口没有使用通用参数,所以你不能创建一个变量输入'BaseInterface'。 –
虽然你可以创建一个'AbstractInterface'类型的变量.. – stuartd