繁体   English   中英

使用具体类型覆盖通用方法(类型参数*隐藏类*)

[英]Override Generic Method With Concrete Type (type parameter * hides class *)

我想在派生类中重写泛型方法。 我要抓住的是这样一个具体的类型参数实现:

namespace Stumped
{
    public class Generic<T> where T : new()
    {
        public virtual T Foo()
        {
            return new T();
        }

        public virtual TAnother GenericMethod<TAnother>() where TAnother : new()
        {
            return new TAnother();
        }
    }

    public class Concrete : Generic<Inner1>
    {
        // Concrete return type. Works as expected.
        public override Inner1 Foo()
        {
            return base.Foo();
        }

        // Why doesn't this make sense? Shows 'Type parameter "Inner2" hides class "Inner2"'.
        public override Inner2 GenericMethod<Inner2>()
        {
            return base.GenericMethod<Inner2>();
        }
    }

    public class Inner1 { }

    public class Inner2 { }
}

如前所述,编译器告诉我:

类型参数“内部”隐藏类“内部”

我希望我的实现能够正常工作,而不必在此派生类中使用另一个通用参数。

为什么这没有道理?

你根本做不到。

覆盖方法不能更改方法界面的任何部分。 由于GenericMethod<OtherClass>()对基类有效,因此它对派生类也必须有效。

这称为Liskov替代原理

当编译器警告您时,您实际上只是声明了一个普通类型参数,该参数恰好与您的类具有相同的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM