当前位置:  开发笔记 > 编程语言 > 正文

C#接口的非公共成员

如何解决《C#接口的非公共成员》经验,为你挑选了3个好方法。

在C#中,当您实现接口时,所有成员都是隐式公共的.那岂不是更好,如果我们可以指定可访问修饰符(protected,internal,除了private当然的),或者我们应该使用抽象类呢?



1> Mark Cidade..:

如果接口是内部接口,则其所有成员都将在程序集内部.如果嵌套接口受到保护,则只有外部类的子类才能访问该接口.

声明程序集之外的接口的内部成员将是毫无意义的,因为在声明外部类之外的接口的受保护成员也是如此.

接口的要点是描述实现类型和接口用户之间的契约.外部用户不会去关心,不应该关心的实现,这是内部和保护成员是.

对于由基类调用的受保护成员,抽象类是指定基类和从它们继承的类之间的契约的方法.但在这种情况下,实现细节通常非常相关,除非它是一个简并的纯抽象类(所有成员都是抽象的),在这种情况下受保护的成员是无用的.在这种情况下,请使用接口并保存单个基类以实现要选择的类型.



2> samjudson..:

您可以通过在方法名称之前显式声明接口名称来隐藏接口的实现:

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
    }
}



3> Ishmaeel..:

没有意义.接口是与公众签订的合同,您支持这些方法和属性.坚持抽象类.


"内部"访问修饰符对于接口来说似乎是非常有用的东西; 在其任何成员上具有这样的修饰符的接口只能由声明它的程序集中的代码实现,但可以由代码在任何地方使用.我可以看到很多用途.
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有