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()
{
}
}
你好!我想让一些方法对外部代码可见,而其他方法只对我的程序集可见。为此,我创建了一个内部接口I_Foo,作为程序集中其他部分的契约,一个公共抽象类A_Foo,用于对外部代码进行抽象,并集中一些构造函数功能,以及几个不同的Foo类,它们显式地实现了A_Foo和I_Foo以保留内部修饰符。
然而,在A_Foo类中,我得到了这样的错误信息:
'A_Foo.I_Foo.Bar()'必须声明一个主体,因为它没有标记为abstract、extern或partial
即使该方法明确标记为“抽象”,如果我添加一个主体,就会得到“抽象不是有效的修饰符”的错误信息。
我需要明确声明这个方法,以便在公共类中将其设为内部,并且我需要它是抽象的,这样我才能在实际实现Foo中重写它。
为什么编译器不允许我这样做? 还有其他方法可以实现相同的功能吗? 谢谢。
public A_Foo()
应该改为protected A_Foo()
,对于抽象类来说这是默认值。由于抽象类的本质,它们的构造函数只能在继承的类内部使用,所以通常避免在构造函数中使用public
修饰符(也避免使用protected internal
的组合修饰符)。 - Jeppe Stig Nielsen