ich eine generische Methode in einer Klasse haben alsC# generische Methodenaufruf statische Funktion
folgtprivate static Dictionary<Type, Feed> _singletons = new Dictionary<Type, Feed>();
public static Feed GetFeed<T>() where T:Feed
{
lock(_padlock)
{
if (!_singletons.ContainsKey(typeof(T))
{
_singletons[typeof(T)] = typeof(T).GetInstance();
}
return _singletons[typeof(T)];
}
}
Hier ist Feed
eine Schnittstelle und Type
ist von Typen von Klassen, die die Feed
-Schnittstelle implementieren. GetInstance()
ist eine statische Methode in diesen Klassen. Ist etwas nicht in Ordnung mit typeof(T).GetInstance();
? Es heißt System.Type
enthält keine Definition für GetInstance()
.
Weil 'typeof()' gibt ein 'Objekt Baumuster zum . Die 'Type' Klasse hat keine solche Methode. – BoltClock
Ja. Diesen Teil bekomme ich. Was ist die Alternative zu diesem Anruf? – Aks
Der Operator 'typeof (T)' gibt eine Instanz von 'System.Type' zurück, keine Instanz von' T'. Nun, nachdem das gesagt wurde, denke ich, dass du wirklich darüber nachdenken solltest, was auch immer du versuchst zu schreiben. Singleton ist ein sehr fieses Anti-Pattern und in Kombination mit Reflektionsmagie scheint es, als ob Sie sich für eine Anwendung fragwürdiger Wartbarkeit einsetzen. Fragen Sie sich, welchen Vorteil Sie mit Ihrem Typwörterbuch haben: Warum sollte ein Client 'var x = Feeds.GetFeed()' anstelle von 'var x = new MyFeedImpl()' schreiben? –
Juliet