2017-05-31 6 views
3

Ich habe eine vorhandene C# generische Klasse und wollen eine Methode basierend auf den verwendeten Typ hinzuzufügen oder zu entfernen, erkläre ichAllgemeine Klasse: bedingte Methode basiert auf Typ

public class MyType<T> 
{ 
    public T getValue() { return value; } 
} 

Für die spezifische MyType<void> möchte ich " lösche die Methode "getValue". Gibt es so etwas?

+0

Meinen Sie, dass für einen bestimmten Typ T, zum Beispiel String, Sie getValue wollen existieren nicht? –

+0

Ja, mit Beispiel. Ich brauche diese Methode für int, float, bool, aber nicht für void! – CDZ

+0

Was meinst du mit hinzufügen oder löschen? Es spielt keine Rolle, ob Sie eine generische Klasse haben oder nicht, definieren Sie Klassenmethoden und diese Methoden zur Verfügung stehen, Generika Methoden grundsätzlich ermöglichen, mit verschiedenen Arten arbeiten – john

Antwort

4

Nope aber man kann wahrscheinlich etwas ähnliches mit Schnittstellen

interface IMyType 
{ 
    //...what ever method/properties are shared for all 
} 

public class MyType<T> : IMyType 
{ 
    public T getValue() { return value; } 
    //...shared methods 
} 

public class MyTypeOtherSide : IMyType 
{ 
    //...shared methods 
} 

Sie würden dann die Variablen als IMyType erklären, müssen erreichen und nur MyType<T> verwenden, wenn Sie wissen, dass es dieses Typs ist

0

Die Zweck der Verwendung von Generika ist eine generische Typdeklaration, die für alle Typen funktioniert, nicht nur für einige.

Ich nehme an, Sie möchten eine Operation nur für Nummern. Sie könnten eine generische Einschränkung auf Klasse hinzufügen, wie folgt:

public class MyType<T> where T: struct 
{ 
    public T getValue() { return value; } 
} 

dies jedoch auch Arten ermöglichen, die das allgemeine Argument void haben die GetValue -Methode haben, wie void ist auch ein struct. Das tut aber nicht weh, da man keinen Typ MyType<void> konstruieren kann, wie Lee auch erwähnt hat.

Des Weiteren wurde leider keine gemeinsame Schnittstelle, die alle numerischen Typen implementieren und die als generische Einschränkung verwendet werden. Die einzige Lösung ist für jede Art ein Verfahren zu haben, so GetDouble, getint, und so weiter

+0

Vielen Dank für Ihre Kommentare, habe ich auch diesen Trick (von Lee) alles im Griff: https://stackoverflow.com/questions/15362424/method-with-same-name-and-signature-but-return- Typ-in-c-scharf – CDZ

Verwandte Themen