2012-03-27 9 views
0

zum Beispiel haben wirwelche überladene Methode würde es verwenden?

 BaseClass myBaseObject 
    InheritedClass myInheritedObject 

und 2 ladenen Methoden

 void Do(BaseClass tmp) 
     { DoA();} 
    void Do(InheritedClass tmp) 
     { DoB();} 

Was würde das tun?

 Do((BaseClass) myInheritedObject); 

Und ist es gängige Technik DoA() unter BaseClass und DoB() unter InheritedClass zu setzen und DoA() außer Kraft gesetzt, und die 2 Do() in 1 zu fusionieren?

 void Do(BaseClass tmp) 
      {return tmp.DoA()} 
+0

erste, weil die Art des Parameters entspricht vollständig seiner Signatur –

+2

Warum fragen Sie, wenn Sie in Ihrem Compiler in der gleichen Zeit für die Sie diese Frage zu schreiben? –

+0

Es ist ein Rätsel oder eine Frage? –

Antwort

2

Die erste - die zweite Überlast nicht anwendbar ist, da der Kompilierung-Typ des Arguments BaseClass statt InheritedClass ist, und es gibt keine implizite Konvertierung von BaseClass zu InheritedClass.

+0

also würde Do (myInheritedObject) DoB() aufrufen? – colinfang

+0

@colinfang: Ja, vorausgesetzt, der * Kompilierzeit-Typ * von 'myInheritedObject' ist' InheritedClass'. Natürlich können Sie das selbst ausprobieren. –

+0

thx, mein Problem wird jetzt, dies zu lösen, könnten Sie plz Hilfe einen Blick haben? http://stackoverflow.com/questions/9892660/how-to-improve-this-method-using-polymorphismoverloading-so-as-to-reduce-is-ty – colinfang

Verwandte Themen