Ich habe also eine Klasse mit einer Wrapper-Klasse innerhalb wie folgt:
public class RandomClass<TK, TV>
{
internal class RandomClassWrapper<TK, TV> : RandomClass<TK, TV> {}
}
Der Grund dafür ist, dass der RandomClassWrapper die new
Schlüsselwort, um das Verhalten einiger der Methoden in RandomClass zu überschreiben. Ich möchte nämlich, dass nur meine Bibliothek auf diese Funktionen zugreifen kann.
Sie muss auch einige der privaten Variablen in RandomClass ändern, weshalb sie verschachtelt ist.
Wenn ich dies jedoch initialisieren möchte, muss ich Folgendes tun
var rc = new RandomClass<int, int>.RandomClassWrapper<int, int>();
Warum ist das erste <int, int>
erforderlich? Warum konnte es nicht einfach so geschrieben werden:
var rc = new RandomClass.RandomClassWrapper<int, int>();
Gibt es eine Möglichkeit, diese zusätzliche Eingabe zu vermeiden? <int, int>
die sich in Dinge wie diese verwandeln können: <Dictionary<string, nameofclass>, List<thisistoolong>>
Das ist eine Übertreibung, aber Sie verstehen, was ich meine. Es ist eine enorme Platzverschwendung, wenn man diese Typen zweimal angeben muss.
Kann jemand einen anderen Ansatz vorschlagen?
Da dies dazu beiträgt, die Frage ein wenig zu klären, möchte ich auf diese beiden Kommentare hinweisen:
Ihre Frage lautet also: "Warum kann der Compiler die generischen Argumente für RandomClassWrapper nicht aus den Argumenten für RandomClass ableiten? - Ed S. vor 3 Minuten
@EdS. Das ist die eine Komponente der Frage, ja. Die andere, ist: Da dies nicht möglich ist, gibt es einen alternativen Ansatz / Hack, der dies bereinigt und vermeidet, dass man die generischen Argumente zweimal eingeben muss. - caesay gerade jetzt