Krátká poznámka k tomu, jak si Microsoft představuje polymorfismus:
ref class MyClass {
public:
String^ ToString() { return "My class with my ToString"; }
};
Co myslíte, že vrátí následující kód?
Object^ obj1 = ref new MyClass;
auto obj2 = ref new MyClass;
return obj1->ToString() == obj2->ToString();
Tak trochu se nemůžu zbavit dojmu, že soudruzi z Microsoftu někde udělali chybu…
tohle vypadá jako manageované C++, takže si nejsem jistý syntaxí, ale když si syntaxi převedu na c#, což by vypadalo takhle:
class MyClass {
public String ToString() { return "My class with my ToString"; }
};
tak imho to máš napsané špatně a mělo by to být:
public override String ToString() { ... }
pak bude:
return obj1.ToString() == obj2.ToString();
vracet 'true' jak asi čekáš
Podívejte se někdy, jak funguje operátor== u typeinfo. Porovnávají se tam "zamumlaný" názvy těch tříd jako řetězec. Ono to má své opodstatnění, třeba v tom, že to funguje napříč DLL knihovnám. Pravda, šlo by to řešit i přes GUID, které by každá třída obdržela, ale jak zajistit její stejné GUID mezi překlady?
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 203×
Přečteno 25 362×
Přečteno 23 796×
Přečteno 20 178×
Přečteno 17 875×