【发布时间】:2017-09-20 00:56:25
【问题描述】:
在我的理解中,如果我们在T1内部有一些类型T1和一个嵌套类型T2(或一个成员M2),那么T2(M2)的可访问性是最小的T1 和 T2 的可访问性。
我的意思是通过在以下架构中搜索两个可访问性级别并采用较低的一个来获得的可访问性:
public
|
protected internal
| |
internal protected
| |
(protected AND internal)*
|
private
(* 这不能直接由访问修饰符定义。它只允许从程序集中定义的继承类型进行访问。)
例子:
internal class T1
// internal
{
public int i;
// internal
protected class T2
// protected and internal
{
public int j;
// protected and internal
}
}
正确吗?如果不是,此规则有哪些例外情况?
我之所以问,是因为在 Wouter de Kort 的“C# 编程:考试参考 70-483”一书中写道:
要记住的是,封闭的访问修饰符 始终考虑类型。比如里面的一个公共方法 内部类具有内部的可访问性。 有 例外情况(例如,当一个内部类实现一个 公共接口或当一个类覆盖的公共虚拟成员时 一个基类),所以你需要在 确定您需要的类型的可访问性。
但没有进一步解释这意味着什么,我不明白。
如果内部类实现了公共接口,则该类只能在程序集中使用。那么实现的接口方法如何比内部更易于访问呢?和静态方法有关系吗?
如果子类覆盖基类的公共方法,则只能在其指定级别访问子类。那么如果孩子不是,如何更容易访问被覆盖的方法呢?和静态方法有关系吗?
【问题讨论】:
标签: c# access-modifiers