2010-02-17 3 views
-2

Как создать экземпляр дочернего класса в C#?Экземпляры детского класса?

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

Пожалуйста, отметьте-код! – Foole

+0

^^^ Прохладный, г-н Т комментировал! ;-) –

ответ

3

В коде есть четыре инстанциации, что все это значит немного разные вещи:

// 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(); 

Какой из них (из тех трех, что работает), что является правильным, зависит от того, что вы хотите достичь.

Обратите внимание, что следующие два случая и печати «это от ребенка»:

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

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

Если вы хотите экземпляр Child, то new Child() является правильным, что нужно сделать. Однако, поскольку Child является специализацией Parent, вы можете обратиться к нему либо через Child, либо ссылку Parent (ch и pa в вашем примере).

Поэтому вам нужно решить, хотите ли вы получить доступ к экземпляру как Child или Parent.

Если вы

Child ch = new Child(); 

У вас есть ссылка, ch от типа Child, указывающей на экземпляр Child.

Если вы

Parent pa = new Child(); 

У вас есть ссылка, pa от типа Parent, указывающей на экземпляр Child. То есть вы пользуетесь тем фактом, что наследование создает связь «есть» между Parent и Child.

Другими словами, тип Child является специализацией Parent. Таким образом, экземпляр Child может использоваться везде, где необходим экземпляр Parent.

+0

Я хочу пойти на экземпляр ребенка ... который, как из выше 4, мне нужно позвонить? – SmartestVEGA

+1

Если вы вызываете 'new Child()', вы получите экземпляр типа 'Child', но, как я уже сказал, вы можете использовать ссылку типа« Child »или« Parent ». Что вы пытаетесь выполнить помимо создания экземпляра? –

+0

Что вы подразумеваете под ссылочным типом родителя или ребенка? ссылочный тип означает левую часть знака «=»? – SmartestVEGA

1

это имеет тенденцию быть более фундаментальным, чем вы думали! я рекомендую вам чтение документа, который объясняет вы наследованию & полиморфизма, например msdn, msdn или codeproject

мне больше о том, давая объяснения, а не решения ...

Смежные вопросы