あなたが言った、
インスタンスでアクセスすると、プロパティを返します。静的にアクセスする場合は、クラスを返します。
Keys
しかし、どこかだけで と言うとどうなりますかMaterial
? これは静的アクセスですか、それともインスタンス アクセスですか? これはプロパティKeys
またはネストされた型を参照していますかKeys
? それは実際にはあいまいです。
例えば、
class Material
{
class Keys
{
public static int Length;
}
string Keys { get; set; }
public void Process()
{
// Does this refer to string.Length (via property Keys)
// or Material.Keys.Length? It actually refers to both.
Console.WriteLine(Keys.Length);
}
}
コメントで指摘されているように、これがすべてではありません。しかし、ほとんど。Color
次のタイプの名前のプロパティを持つことは有効でColor
あり、衝突はありません。
public Color Color { get; set; }
Color.FromName(...) // refers to static method on the type ‘Color’
Color.ToString() // refers to instance method on the property’s value
しかし、現在のスコープ内のものはより外側のスコープのものに勝つため、これは簡単に解決できます。
public class MyType { public string FromName(string name) { return null; } }
public MyType Color;
Color.FromName(...) // unambiguously refers to MyType::FromName(string)
// via the property Color
あなたの例ではそれほど簡単ではありません — ネストされたクラスKeys
とプロパティKeys
は同じスコープにあります (同じ宣言型を持っています)。どちらを優先するかはどうやって決めるのですか?そのうちの 1 つを優先することにしたとしても、同じ名前のものは 2 つしか持つことができず、1 つが静的で、もう 1 つがインスタンスでなければならないため、これはほとんど役に立ちません。