メソッドレベルでT
(別の意味)のクラスレベルでの宣言についてはの宣言についてはthis interesting questionが見えました。汎用タイプの競合ですか?
私はテストをしました。
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)
{
}
}
Eric saidとして、コンパイラは警告します。
しかし、ちょっと、型の安全に何が起こったのですか? のメソッドレベルに型の安全性があると仮定しますが、T
が既に宣言されているクラスのという文脈についてはというグローバルコンテキストについてはどうでしょうか。誰かが私を求めているならば
私が意味する、私はそこにエラーこととない警告はずですよね。
なぜコンパイラで許可されていますか? (私は妥当な答えを聞きたいです。)
これは、既存のクラスフィールド名と同じ名前のメソッド変数を宣言するのとほとんど同じだと思います。これは動作しますが、コンパイラも警告します。 – sll
「しかしちょっと、型の安全に何が起こったのですか? ?どのような型の安全違反があれば、それは起こっているのですか? – AakashM
'public void MyMethod(T k)'を 'public void MyMethod(T k)'に変更すると、エラーが発生するはずです:-) –
Carsten