在C#中,当您实现接口时,所有成员都是隐式公共的.那岂不是更好,如果我们可以指定可访问修饰符(protected
,internal
,除了private
当然的),或者我们应该使用抽象类呢?
如果接口是内部接口,则其所有成员都将在程序集内部.如果嵌套接口受到保护,则只有外部类的子类才能访问该接口.
声明程序集之外的接口的内部成员将是毫无意义的,因为在声明外部类之外的接口的受保护成员也是如此.
接口的要点是描述实现类型和接口用户之间的契约.外部用户不会去关心,不应该有关心的实现,这是内部和保护成员是.
对于由基类调用的受保护成员,抽象类是指定基类和从它们继承的类之间的契约的方法.但在这种情况下,实现细节通常非常相关,除非它是一个简并的纯抽象类(所有成员都是抽象的),在这种情况下受保护的成员是无用的.在这种情况下,请使用接口并保存单个基类以实现要选择的类型.
您可以通过在方法名称之前显式声明接口名称来隐藏接口的实现:
public interface IInterface { public void Method(); } public class A : IInterface { public void IInterface.Method() { // Do something } } public class Program { public static void Main() { A o = new A(); o.Method(); // Will not compile ((IInterface)o).Method(); // Will compile } }
没有意义.接口是与公众签订的合同,您支持这些方法和属性.坚持抽象类.