<分区>
在 C# 中,当您实现一个接口(interface)时,所有成员都是隐式公开的。如果我们可以指定可访问性修饰符(protected
、internal
,当然 private
除外),那不是更好吗?或者我们应该只使用一个抽象类代替?
<分区>
在 C# 中,当您实现一个接口(interface)时,所有成员都是隐式公开的。如果我们可以指定可访问性修饰符(protected
、internal
,当然 private
除外),那不是更好吗?或者我们应该只使用一个抽象类代替?
最佳答案
如果一个接口(interface)是内部的,它的所有成员都将是程序集的内部。如果嵌套接口(interface)受到保护,则只有外部类的子类可以访问该接口(interface)。
在其声明程序集之外的接口(interface)的内部成员将毫无意义,在其声明的外部类之外的接口(interface)的 protected 成员也是如此。
接口(interface)的意义在于描述实现类型和接口(interface)用户之间的契约。外部调用者不会关心也不应该必须关心实现,而这正是内部成员和 protected 成员的目的。
对于由基类调用的 protected 成员,抽象类是指定基类和从它们继承的类之间的契约的方式。但在这种情况下,实现细节通常非常相关,除非它是一个退化的纯抽象类(其中所有成员都是抽象的),在这种情况下 protected 成员是无用的。在这种情况下,使用一个接口(interface)并保存单个基类以实现可供选择的类型。
关于c# - C# 接口(interface)的非公共(public)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17576/
相关文章:
java - 编译器如何知道 obj.print(); 应该调用哪个打印方法?
c# - 创建 Dictionary<string, EntityProperty> 的字典以存储在 Azure 表存储中
c# - 在提供 ISigningCredentialStore 的自定义实现后,Identity Server 仍将内存中的 key 包含在发现文档中
c# - 创建引用第 3 方 DLL 的独立 C# 可执行文件?
c# - 如何使用 DNX 和 ASP.NET 5 实现持续交付