#名称隐藏-1(通过嵌套的名称隐藏)
以下各项会导致发生通过嵌套的名称隐藏:在命名空间内嵌套其他命名空间或类型;在类或结构中的嵌套类型;声明形参和局部变量。
在下面的示例中
class A { int i = 0; void F() { int i = 1; } void G() { i = 1; } }
在方法 F 中,实例变量 i 被局部变量 i 隐藏,但在方法 G 中,i 仍引用该实例变量。
当内部范围中的名称隐藏外部范围中的名称时,它隐藏该名称的所有重载匹配项。在下面的示例中
class Outer { static void F(int i) {} static void F(string s) {} class Inner { void G() { F(1); // 下方F方法 F("Hello"); // 错误 } static void F(long l) {} } }
由于 F 的所有外部匹配项都被内部声明隐藏,因此调用 F(1) 将调用在 Inner 中声明的 F。由于同样的原因,调用 F(“Hello”) 将导致编译时错误。