相关疑难解决方法(0)

C#泛型和多态:一个矛盾?

我只想确认一下我对C#中的Generics的理解.这已经出现在我使用的几个代码库中,其中使用通用基类来创建类型安全的派生实例.我正在谈论的一个非常简单的例子,

public class SomeClass<T>
{
    public virtual void SomeMethod(){ }
}

public class DeriveFrom :SomeClass<string>
{
    public override void SomeMethod()
    {
        base.SomeMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我想以多态方式使用派生实例时,问题出现了.

public class ClientCode
{
    public void DoSomethingClienty()
    {
        Factory factory = new Factory();
        //Doesn't compile because SomeClass needs a type parameter!
        SomeClass someInstance = factory.Create();

        someInstance.SomeMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

看来,一旦将Generic引入继承层次结构或接口,就不能再以多态方式使用该类族,除非它本身就是内部的.真的吗?

c# generics polymorphism

18
推荐指数
3
解决办法
8832
查看次数

标签 统计

c# ×1

generics ×1

polymorphism ×1