在 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
嵌套类型I
是protected
。
这意味着I
对所有C
以及从C
派生的所有类都可见。例如,这可用于在 C
中创建 protected
实例方法,在其签名或返回类型中包含 I
。
注意:界面的默认可访问性不是public
,就像您声称的那样。接口的成员的默认可访问性是public
。那是另一回事。
接口本身的默认可访问性取决于接口本身是什么成员。如果接口是“外部”class
或 struct
的成员(如我上面的C
),它通常具有class
和struct
成员的默认可访问性,即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 类(对象)中使用受保护的访问修饰符