gpt4 book ai didi

c# - 无法隐藏继承的成员编译器错误

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:07 24 4
gpt4 key购买 nike

我想做的事:

public abstract class Base
{
public abstract Task Execute();
}

public abstract class Concrete<T> : Base where T : class
{
new public abstract Task<T> Execute();
}

但是由于某种原因我遇到了编译器错误:

CS0533 'Concrete.Execute()' hides inherited abstract member 'Program.Base.Execute()

我过去隐藏了很多成员,但从未遇到过这种情况,我在这里很困惑。在 MSDN 和网络上花了很长时间,但找不到有关此行为的任何信息。

如果您对这个问题有任何见解,我将不胜感激。

这是 the fiddle .

最佳答案

问题是基本方法是abstract .一个继承自 Concrete<T> 的类必须覆盖 Base.Execute() , 但它无法覆盖它,因为它被 Derived<T>.Execute() 隐藏了.所以,Concrete<T>将是 abstract不可能有任何实现的类(至少在 C# 中没有),因此它是无用的。因此,C# 编译器不允许您编写它。

如果Base是一个接口(interface),您可以通过使用显式接口(interface)实现来解决这个问题。但是没有像显式基类实现那样的东西,所以我认为没有任何方法可以拥有这种代码,至少在不重命名这两种方法之一的情况下是这样。

关于c# - 无法隐藏继承的成员编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39375263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com