在 C# 中,我们可以对接口使用受保护的访问修饰符吗?

Posted

技术标签:

【中文标题】在 C# 中,我们可以对接口使用受保护的访问修饰符吗?【英文标题】:In C# can we ever use protected access modifier for an interface? 【发布时间】:2015-12-25 16:22:30 【问题描述】:

接口的默认访问修饰符是公共的。然而,

【问题讨论】:

你是指接口的成员,还是接口本身? 已编辑 接口的所有声明成员始终是公共的。如果接口嵌套在非静态、非密封的外部class 中,则接口本身的可访问性可以是protected 据我记忆,您不能为接口成员指定访问修饰符。 看看这个:***.com/questions/516148/… 当然,您可以声明一个受保护的嵌套接口。为什么你会做这样的事情很难猜到。 【参考方案1】:

在这个例子中:

class C

  protected interface I
  
  

嵌套类型Iprotected

这意味着I 对所有C 以及从C 派生的所有类都可见。例如,这可用于在 C 中创建 protected 实例方法,在其签名或返回类型中包含 I

注意:界面的默认可访问性不是public,就像您声称的那样。接口的成员的默认可访问性是public。那是另一回事。

接口本身的默认可访问性取决于接口本身是什么成员。如果接口是“外部”classstruct 的成员(如我上面的C),它通常具有classstruct 成员的默认可访问性,即private。如果接口是namespace(可能是全局命名空间)的直接成员,则默认可访问性是所有非嵌套类型的通常默认值,即internal

【讨论】:

【参考方案2】:

您可以更改此可访问性。

查看此页面:https://msdn.microsoft.com/en-us/library/ms173121.aspx。

据说“直接在命名空间中声明的接口可以声明为公共的或内部的,就像类和结构一样,接口默认为内部访问。”

请注意,正如您在此链接中看到的那样,https://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx 成员默认是公开的,无法修改。

【讨论】:

该页面讨论的是成员的可访问性,而不是界面本身。 这个link 谈论接口及其成员。

以上是关于在 C# 中,我们可以对接口使用受保护的访问修饰符吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们不能在 Kotlin 的 Singleton 类(对象)中使用受保护的访问修饰符

为啥接口成员没有访问修饰符? [复制]

受保护和没有访问修饰符之间的区别[关闭]

C#中4个访问修饰符(随笔)

我们使用访问修饰符来限制用户对受保护/私有变量的访问,但用户怎么可能尝试访问它们呢?

C# 五大修饰符