Ich habe ein Wörterbuch - der Schlüssel davon ist System.Type
. Ich beschränke die Wörterbucheinträge nicht weiter; Das Wörterbuch wird jedoch nur über eine öffentliche Klassenschnittstelle verfügbar gemacht. Ich imitierte ein Ereignissystem.Constraining System.Type Als generischer Parameter für Typ Sicherheit
Die System.Collections.Generic
Dictionary
sieht aus wie:
private Dictionary<Type, HashSet<Func<T>>> _eventResponseMap;
Eine der Methoden, die das Wörterbuch aussetzt hat die folgende Signatur:
public bool RegisterEventResponse<T>(Type eventType, Func<T> function)
aber ich will nicht die Klasse Benutzer in der Lage sein, über diese Signatur ein beliebiges System.Type
zum Wörterbuch hinzuzufügen. Gibt es eine Möglichkeit, den Parameter Type
weiter einzuschränken?
Was ich wirklich will, ist so etwas wie (Pseudo-Code):
public bool RegisterEventResponse<T>(Type eventType, Func<T> function) where Type : ICustomEventType
Es gibt wahrscheinlich etwas Müll im obigen Code. Wenn du darüber hinwegsehen könntest, wäre das großartig. Ich fotografiere hier im Dunkeln, konzeptionell (wird per Vorschlag geändert) – Thomas
Anstelle von 'Type' können Sie einen anderen generischen Typ wie' T2' verwenden und diesen auf bestimmte Typen beschränken. [Dies wurde bereits hier beantwortet] (http://stackoverflow.com/a/4834066/4767498) mit Richtlinienmuster. Dieser Ansatz führt zu einem Kompilierzeitfehler, wenn der richtige Typ nicht verwendet wird. Einfacher wäre es, Typen zur Laufzeit zu prüfen. –