クラスレベルでの宣言とメソッドレベルでの同じ文字(異なる意味) について話しているこの興味深い質問を見ました。T
T
だから私はテストをしました。
static void Main(string[] args)
{
var c = new MyClass<int>(); //T is int
c.MyField = 1;
c.MyProp = 1;
c.MyMethod("2");
}
public class MyClass<T>
{
public T MyField;
public T MyProp { get; set; }
public void MyMethod<T>(T k)
{
}
}
エリックが言ったように、コンパイラは警告します。
しかしねえ、型安全性はどうなったのですか?メソッドレベルには型安全性があると思いますが、すでに宣言されているクラスのグローバルコンテキストについてはどうでしょうか。T
つまり、誰かが私に尋ねたとしたら、警告ではなくエラーがあるはずだと思います。
なぜコンパイラはそれを許可するのですか?(私は合理的な答えを聞きたいです)