2016-04-05 6 views
0

in C# zu Unterklasse, wie können wir von Super konvertieren, um eine Unterklasse ein Beispiel bezogene spezifische Methode zu verwenden, um eine Unterklasse ist unten angegebenvon Super Konvertieren

Public class A{ 
} 
Public class B:A{ 

MethodName; 
} 

I

A a= new A; 
(B) b=(B)(a); 
b.MethodName(); 

versucht haben, Aber es funktioniert nicht, irgendein Vorschlag?

+0

Es funktioniert nicht, weil ein 'A' kein' B' ist. Kannst du ein realistischeres Beispiel dafür geben, warum du versuchst zu verwerfen? –

+1

Nehmen wir an, Sie haben eine Klasse "Auto" und eine Unterklasse von "Honda". Wenn du eine Instanz von "Auto" hast, kannst du das als "Honda" bezeichnen? Nein, denn nicht alle Autos sind Hondas. –

+0

Benennen Sie "A" um "Animal" und "B" um "Bear" zu sein. Sie können sehen, dass alle Bären Tiere sind, aber nicht alle Tiere Bären sind. Nur weil du einen Bezug zu Tier hast, kannst du es nicht zum Bären machen. Es könnte eine Katze sein. – Ian

Antwort

0

Sie können eine Basisklasse nicht in die abgeleitete Klasse konvertieren; @PaulAbbott erklärt warum in seinem Kommentar. wenn Sie ein Objekt der Basisklasse haben jedoch, die einen Wert der abgeleiteten Klasse hält, können Sie ein Objekt der abgeleiteten Klasse erfassen die as Operator, die Methode aufzurufen:

 A a = new B(); 
     B b = (a as B); //Try to capture the value of "a" into an object of type "B"; and if you fail, return null 
     if(b != null) //If "a" really holds a value of type "B" 
      b.MethodName(); 

Eine weitere Option ist abstract method in einer abstract class; aber in diesem Fall müssen Sie A abstract (abstract class A) machen.

abstract class A 
    { 
     public abstract void MethodName(); 
    } 

    class B : A 
    { 
     public override void MethodName() 
     { 
      //... 
     } 
    } 

und

 A a = new B(); 
     a.MethodName(); //See which derived class do I ("a") hold his value, and call the overridden method from there ("B") 

ABER dies wird verhindern, dass Sie A ‚s Konstrukteure verwenden und die abstrakte Methode in jeder abgeleiteten Klasse außer Kraft zu setzen haben.