2010-02-17 10 views
-2

Comment créer une instance d'une classe enfant en C#?Instance de classe enfant?

public class Parent 
{ 
    public virtual void test() 
    { 
     Console.WriteLine("this is parent"); 
    } 
} 

public class Child : Parent 
{ 
    public override void test() 
    { 
     Console.WriteLine("this is from child"); 
    } 
} 

public static void main() 
{ 
    //Which one is right below? 

    Child ch = new Child(); 

    Parent pa = new Parent(); 

    ch = new Parent(); 

    pa = new Child(); 

    ch.test(); 

    pa.test(); 
} 
+2

S'il vous plaît marquer le code-! – Foole

+0

^^^ Cool, M. T Commenté! ;-) –

Répondre

3

Dans votre code, vous avez quatre instanciations, que tout cela veut dire légèrement différentes choses:

// create a new instance of child, treat it as an instance of type child 
Child ch = new Child(); 

// create a new instance of parent, treat it as an instance of parent 
Parent pa = new Parent(); 

// this will not compile; you cannot store a less specialized type in a variable 
// declared as a more specialized type 
Child ch = new Parent(); 

// create a new instance of child, but treat it as its base type, parent 
Parent pa = new Child(); 

Lequel (de ces trois qui fonctionne) qui est correct dépend de ce que vous voulez atteindre.

Notez que les deux cas suivants à la fois l'impression « ceci est de l'enfant »:

Child ch = new Child(); 
ch.test(); 

Parent pa = new Child(); 
pa.test(); 
2

Si vous voulez une instance de Child, alors new Child() est la bonne chose à faire. Cependant, comme Child est une spécialisation de Parent, vous pouvez vous y référer soit par l'intermédiaire d'une référence Child ou Parent (ch et pa dans votre exemple). Vous devez donc décider si vous souhaitez accéder à l'instance en tant que Child ou Parent.

Si vous

Child ch = new Child(); 

Vous avez une référence, ch du type Child pointant vers une instance de Child.

Si vous

Parent pa = new Child(); 

Vous avez une référence, pa du type Parent pointant vers une instance de Child. C'est à dire. vous profitez du fait que l'héritage crée une relation «est un» entre Parent et Child. En d'autres termes, le type Child est une spécialisation de Parent. Ainsi, une instance de Child peut être utilisée partout où une instance de Parent est nécessaire.

+0

Je veux aller pour l'instance de l'enfant ... qui, comme sur 4 ci-dessus, je dois appeler? – SmartestVEGA

+1

Si vous appelez 'new Child()', vous obtiendrez une instance de type 'Child', mais comme je l'ai dit, vous pouvez utiliser soit une référence de type' Child' ou 'Parent'. Qu'essayez-vous d'accomplir en plus de créer l'instance? –

+0

que voulez-vous dire par type de référence du parent ou de l'enfant? le type de référence signifie-t-il la partie gauche du signe "="? – SmartestVEGA

1

cela tend à être plus fondamental, que vous pensiez! Je vous recommande la lecture d'un papier qui vous traite de l'héritage polymorphisme &, par exemple msdn, msdn ou codeproject

pour moi, il est plus de donner une explication plutôt qu'une solution ...

Questions connexes