Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用具体类型重写泛型方法(类型参数*隐藏类*)_C#_Generics_Inheritance_Type Parameter - Fatal编程技术网

C# 使用具体类型重写泛型方法(类型参数*隐藏类*)

C# 使用具体类型重写泛型方法(类型参数*隐藏类*),c#,generics,inheritance,type-parameter,C#,Generics,Inheritance,Type Parameter,我想重写派生类中的泛型方法。关键是我希望有一个具体的类型参数实现,如下所示: namespace Stumped { public class Generic<T> where T : new() { public virtual T Foo() { return new T(); } public virtual TAnother GenericMethod<TAnoth

我想重写派生类中的泛型方法。关键是我希望有一个具体的类型参数实现,如下所示:

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 { }
}
名称空间被难住了
{
公共类泛型,其中T:new()
{
公共虚拟T-Foo()
{
返回新的T();
}
公共虚拟TAnother GenericMethod(),其中TAnother:new()
{
返回新的TAnother();
}
}
公共类混凝土:通用
{
//混凝土返回类型。按预期工作。
公共覆盖Inner1 Foo()
{
返回base.Foo();
}
//为什么这没有意义?显示“类型参数”Inner2“隐藏类”Inner2“。
公共重写Inner2 GenericMethod()
{
返回base.GenericMethod();
}
}
公共类Inner1{}
公共类Inner2{}
}
如前所述,编译器告诉我:

类型参数“Inner”隐藏类“Inner”

我希望我的实现能够工作,而不必在这个派生类中使用另一个泛型参数


为什么这样做没有意义?

你根本做不到

重写方法不能更改该方法接口的任何部分。由于
GenericMethod()
对基类有效,因此它也必须对派生类有效

这就是所谓的


正如编译器警告您的那样,您实际上只是声明了一个与您的类同名的普通类型参数。

我的编译器没有显示任何内容。可能是一个重新精简的东西。尽管如此,这条信息还是有效的。如果我试图访问在ReulEdEngEngic方法中的内蒙2的属性,它告诉我没有定义该属性(因为我显然隐藏了该类)。这与我超越FO的方式不同吗?@比特字节:<代码> Foo< /Cl>不是通用的。C++是有能力的吗?模板函数专门化?