Это как:
public class Super
{
public class Sub
{
public static string OtherValue { get { return Super.SomeValue; } }
}
public static string SomeValue { get { return "Outer"; } }
}
С Super
, удерживающим статический SomeValue
<ч />
Это более четко отображается как:
public class Super
{
public static string SomeValue { get { return "Outer"; } }
}
public class Sub
{
public static string OtherValue { get { return Super.SomeValue; } }
}
Теперь, когда Sub
и Super
равны public
, их статические свойства видны всем в их общей области видимости. И, как указывает @jonskeet, компилятор будет искать наилучшее соответствие для SomeValue
, сначала просматривая класс Sub
, так как значение используется в этом классе.
Теперь что-то подобное не скомпилируется:
public class Super
{
private static string SomeValue { get { return "Outer"; } }
}
public class Sub
{
public static string OtherValue { get { return SomeValue; } }
}
Однако * * один тысяча двадцать-одна
public class Super
{
private static string SomeValue { get { return "Outer"; } }
public class Sub
{
public static string OtherValue { get { return SomeValue; } }
}
}
все вышеперечисленное прекрасно из-за вложенности классов.