jfs*_*jfs 30 .net c# interface
在C#中,当您实现接口时,所有成员都是隐式公共的.那岂不是更好,如果我们可以指定可访问修饰符(protected,internal,除了private当然的),或者我们应该使用抽象类呢?
Mar*_*ade 34
如果接口是内部接口,则其所有成员都将在程序集内部.如果嵌套接口受到保护,则只有外部类的子类才能访问该接口.
声明程序集之外的接口的内部成员将是毫无意义的,因为在声明外部类之外的接口的受保护成员也是如此.
接口的要点是描述实现类型和接口用户之间的契约.外部用户不会去关心,不应该有关心的实现,这是内部和保护成员是.
对于由基类调用的受保护成员,抽象类是指定基类和从它们继承的类之间的契约的方法.但在这种情况下,实现细节通常非常相关,除非它是一个简并的纯抽象类(所有成员都是抽象的),在这种情况下受保护的成员是无用的.在这种情况下,请使用接口并保存单个基类以实现要选择的类型.
sam*_*son 20
您可以通过在方法名称之前显式声明接口名称来隐藏接口的实现:
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
}
}
Run Code Online (Sandbox Code Playgroud)
没有意义.接口是与公众签订的合同,您支持这些方法和属性.坚持抽象类.
这里的所有答案或多或少都表明接口应该是这样的,它们是通用的公共规范。
这是讨论最多的主题,当这个问题浮现在我的脑海时,让我发布我在 SO 上找到的两个很好的答案。
这个答案给出了一个例子,说明为派生类中的接口成员使用非统一访问说明符是多么荒谬。代码总是比技术描述更好。
对我来说,强制公共接口成员最糟糕的事情是接口本身可以在程序集内部,但它公开的成员必须是公共的。乔恩·斯基特 (Jon Skeet) 可悲地解释说,这是设计使然。
这就提出了一个问题,为什么接口的设计不是为成员提供非公开定义。这可以使合同具有灵活性。在编写不希望类的特定成员暴露给程序集外部的程序集时,这非常有用。我不知道为什么。
| 归档时间: |
|
| 查看次数: |
32544 次 |
| 最近记录: |