c# - C# 接口(interface)的非公共(public)成员

标签 c# .net interface

<分区>

在 C# 中,当您实现一个接口(interface)时,所有成员都是隐式公开的。如果我们可以指定可访问性修饰符(protectedinternal,当然 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 实现持续交付

java - 接口(interface)如何在其签名或返回类型中包含引用接口(interface)具体实现类型的方法?

c# - 检查数组是否是多维的

c# - WP8 应用程序中具有 WCF 服务的凭据

c# - 如何从 FTP 获取文件(使用 C#)?

asp.net - 为 ASP.NET MVC 站点创建 robots.txt