#名称隐藏-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”) 将导致编译时错误。