Ich sah this interesting question, die über T
Deklaration auf Klassenebene und den gleichen Buchstaben T
(unterschiedliche Bedeutung) auf Methodenebene spricht.Generische Artkonflikte?
Also habe ich einen Test gemacht.
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)
{
}
}
Wie Eric said warnt der Compiler warnen.
Aber Hey, was ist mit Sicherheit eingeben? Ich nehme an, es gibt eine Art Sicherheit bei der Methodenebene, aber was ist mit der globalen Kontext der Klasse, in der T
bereits deklariert wurde.
Ich meine, wenn jemand mich gefragt haben würde, hätte ich denke, es sollte ein Fehler dort und keine Warnung.
Warum der Compiler dies erlaubt? (Ich würde gerne eine vernünftige Antwort hören)
Ich glaube, das ist fast das selbe wie deklarieren Methodenvariable mit dem gleichen Namen wie bereits bestehenden Klasse Feldname - das funktioniert, aber Compiler warnen Sie auch – sll
Könnten Sie auf "Aber Hey, was passiert, um Sicherheit eingeben?" ? Welche Art von Sicherheitsverletzung, wenn überhaupt, betrifft Sie? – AakashM
Ändere 'public void MyMethod (T k) 'in' public void MyMethod (T k) 'und es sollte ein Fehler sein :-) –
Carsten