接口可以用来强制实现方法,但是这些方法需要是公共的。
那么如果我想强制实现私有方法呢?
更新:这不是为了防止调用,而是确保私有方法已经被实现。
所以我不想仅仅使用接口,我想对团队施加一些编码风格的要求。
接口可以用来强制实现方法,但是这些方法需要是公共的。
那么如果我想强制实现私有方法呢?
更新:这不是为了防止调用,而是确保私有方法已经被实现。
所以我不想仅仅使用接口,我想对团队施加一些编码风格的要求。
接口总是公共的定义。强制实现受保护的方法(对外部私有但可由派生类访问)的唯一方法是通过子类化定义该方法的抽象类:
public abstract class A
{
protected abstract void Foo();
}
public class B : A
{
protected override void Foo() { }
}
如果您正在尝试在B
中更改Foo
的访问修饰符,或者忘记为B
提供Foo()
的实现,则上述代码将会出错。
编辑:
我相信使用一个嵌套类可以做到接近你所想要的:这将允许使用外部类的私有字段,并同时强制执行接口的实现,而技术上该类在任何其他地方都不可见:
public interface IFooWorker
{
void DoWork();
int CalculateSomething();
}
public class Foo
{
private FooWorker _worker;
private int _currentValue;
private string _workStatement;
public Foo()
{
_worker = new FooWorker(this);
}
private class FooWorker : IFooWorker
{
private Foo _outer;
public FooWorker(Foo foo)
{
_outer = foo;
}
public void DoWork()
{
_outer._currentValue = CalculateSomething();
_outer._workStatement = "I did work";
}
public int CalculateSomething()
{
return 42;
}
}
}
class Foo
是您无法修改的某个地方。您可以创建 public abstract class MyFoo : Foo
来添加一个抽象受保护成员,然后更具体的类从 MyFoo
继承并提供实现。 - Anthony Pegram它不会是“私有的”,但您仍然可以使用显式接口实现来模拟它。
请参见:http://msdn.microsoft.com/en-us/library/ms173157.aspx
但是,没有任何东西可以阻止某人通过向上转换为接口类型直接调用您的方法。再说了,私有方法是实现细节:它们不属于接口。
按照定义,接口是一组公共方法。也许你需要一个抽象类。
这是没有意义的,因为在接口中声明的私有方法无法被调用。