gpt4 book ai didi

c# - 实现内部接口(interface)的公共(public)抽象类中的抽象方法无法编译?

转载 作者:行者123 更新时间:2023-11-30 13:19:01 26 4
gpt4 key购买 nike

internal interface I_Foo
{
void Bar();
}

public abstract class A_Foo : I_Foo
{
public A_Foo() { }
abstract void I_Foo.Bar();
}

public class Foo : A_Foo
{
public Foo() : base() { }
internal override void Bar()
{

}
}

您好!我试图让一些方法对外部代码可见,而其他方法只对我的程序集可见。为此,我制作了一个内部接口(interface) I_Foo 作为程序集其他部分的契约,一个公共(public)抽象 A_Foo 作为外部代码的抽象,并集中了一些构造函数,以及几个实现 A_Foo 和 I_Foo 的不同类 Foo明确保留内部修饰符。

但是,在 A_Foo 类中,我得到了

'A_Foo.I_Foo.Bar()' must declare a body because it is not marked abstract, extern, or partial

即使该方法明确标记为“抽象”。如果我添加正文,我会得到“abstract is not a valid modifier”。

我需要显式声明此方法,以便在公共(public)类中成为内部方法,并且我需要它是抽象的,以便我可以在实际实现 Foo 中覆盖它。

为什么编译器不让我这样做?还有另一种方法可以实现同样的目标吗?谢谢。

最佳答案

显式接口(interface)实现总是必须有一个实际的实现。这里的技巧是让它只调用一个非显式(内部)抽象方法:

public abstract class A_Foo : I_Foo
{
// Classes outside the assembly can't derive from A_Foo
// anyway, so let's make the constructor internal...
internal A_Foo() { }

void I_Foo.Bar()
{
Bar(); // Just delegate to the abstract method
}

internal abstract void Bar();
}

这仍然允许 I_Foo 使用内部类型等,因为 Bar 永远不会公开 - 但它符合语言的其他规则。

关于c# - 实现内部接口(interface)的公共(public)抽象类中的抽象方法无法编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35040780/

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