Warum bin ich immer CS0119 über eine statische Methode in einer Vorlage?

Warum wird in diesem (erfundenen) Beispiel geben, "Fehler CS0119: 'T' a "- Typ-parameter', das gilt nicht in diesem Zusammenhang". Sicherlich habe ich ihm gesagt, dass der Typ eine geeignete Methode?

abstract class Foo
{
   static public bool IsIt() {return true;}
}

class Bar
{
   public bool CanIt<T>() where T : Foo
   {
       return T.IsIt();
   }
}

Die eigentliche motivierende Beispiel ist etwas komplizierter mit CRTP in der template-parameter, aber das zeigt das problem.

  • Sie sind sich nicht übergeben Sie eine Instanz von T sind Sie nur auf der Durchreise zu seinem Typ. Sie können nicht rufen Sie eine Methode auf etwas ist es einfach zu bestimmen Art.
  • Das macht nicht wirklich Sinn. Statische Methoden werden nicht vererbt, so ist Ihre Klasse nie wieder was anderes, aber wahr und darüber hinaus keine Ableitung von Foo ist gezwungen, um einen statischen member aufgerufen, IsIt. Kann es garnicht gibt.
  • c# nicht Vorlagen. Es hat Generika.
  • fair point, aber Sie wissen, was ich meine.
  • du meinst eine Ableitung von Foo verstecken konnte die statische Methode in seiner Basis? Wie?
  • Einfach nicht, es Umzusetzen. Ich denke Aufruf der statischen durch eine abgeleitete Klasse funktioniert, aber strahlt eine Warnung. Aber es gibt keine Vererbung. Wenn Sie einschränken, dass T Foo, es würde immer Foo.IsIt, nie eine abgeleitete Klasse " - Methode. Und weil das so ist, es ist nicht möglich, weil Foo.IsIt würde genauso gut funktionieren ohne jemanden zu verkennen Sie für die Arbeit Vererbung.

InformationsquelleAutor Pete | 2014-01-09
Schreibe einen Kommentar