2010-03-15 3 views
1

Je ne sais pas si c'est possible ou non, mais voici ce dont j'ai besoin. Je suis en train de jouer avec quelque chose et je veux savoir si c'est possible puisque vous ne pouvez pas créer votre propre type de données basé sur un type scellé comme int, Int32, Int64, etcRéférence héritée de la classe <T> ype dans une classe dérivée

Je veux créer un top classe de niveau qui est définie d'un type donné avec quelques trucs communs. Ensuite, dérivez cela en deux sous-classes, mais dans ce cas, chaque classe est basée sur les deux types int et int ou. À partir de cette instance, créez une instance de l'un ou de l'autre et connaissez sa base yped pour les paramètres de référence/retour du paramètre. Donc, quand j'ai besoin de créer une instance de "ThisClass", je n'ai pas besoin de connaître sa base de type int ou Int64, mais elle connaîtra le type et pourra autoriser les méthodes/fonctions à être appelé avec le typé ... De cette façon, si je veux changer ma définition ThisClass de SubLevel1 à SubLevel2, je n'ai pas à danser autour de toutes les différentes définitions de type de données.

Hope this sens ..

public class TopLevel<T> 
{ 
... 
} 

pubic class SubLevel1 : TopLevel<int> 
{ ... 
} 

public class SubLevel2 : TopLevel<Int64> 
{ ... 
} 

public class ThisClass : SubLevel1 
{ ... 
    public <based on the Int data type from SubLevel1> SomeFunc() 
    { 
     return <the Int value computed>; 
    } 
} 

Répondre

2

Je suppose someFunc doit être présent dans toutes les sous-classes de TopLevel<T> vous devez donc définir là:

public abstract class TopLevel<T> 
{ 
    public TopLevel() 
    { 
    } 

    public abstract T SomeFunc(); 
} 

et sous-classes spécifiques connaître le paramètre de type générique, donc ThisClass définirait someFunc comme:

public class ThisClass : SubLevel1 
{ ... 
    public override int SomeFunc() 
    { 
     return <the Int value computed>; 
    } 
} 
+0

c'était l'attente, mais ne voulait pas nécessairement remplir certains d'entre eux au niveau abstrait, mais en travaillant ... merci – DRapp

1

Cela ne peut être fait au moment de la compilation sans paramterizing toutes les classes dérivées:

public class ThisClass<T> : SubLevel1<T> etc etc 

Vous pouvez le faire lors de l'exécution avec la réflexion par inspecter typeof(ThisClass).BaseType etc. mais cela pourrait devenir assez compliqué car vous devez écrire du code qui comprend l'héritage et la hiérarchie des paramètres de type générique de la totalité de la ligne de base.

0

Vous ne pouvez pas faire cela comme demandé.

Cependant, vous pouvez écrire using MyType = System.Int32; en haut du fichier, puis utiliser MyType partout dans le fichier. Cela vous permettra de changer de type facilement.

Questions connexes