Sprawa wygląda tak, że użytkownik wskazuje obiekt. Może wybrać Obiekt1 albo Obiekt2.
Oba obiekty mają wiele "wspólnych" (takich samych) metod, właściwości, ale rzutowanie obiektu Obiekt1 na Obiekt2 prowadzi do błędu.
Jak mogę zrobić tak, aby użytkownik wskazał obiekt. Następnie ja sprawdzam czy jest to Obiekt1 czy Obiekt2 i rzutuję odpowiednio?
Próbowałem wpakować to w Ifa, ale przy późniejszej próbie dobrania się do metody/właściwości otrzymuję błędy, że obiekt nie zawiera metody/właściwości.
Różne klasy.
Mam klasę Dimension.
Klasy AlignedDimension i RotatedDimension dziedziczą po niej.
Niestety sama klasa Dimension nie ma metod, które są mi potrzebne, a są w Aligned i Rotated Dimension.
if (o1 is AlignedDimension);
// zrzutuje się na AlignedDimension
;
i analogicznie z drugą klasą
---[edit]---
możesz też użyć słowa kluczowego "as", które działa jak operator rzutowania, ale zamiast rzucać wyjątkami, to zwraca null, dzięki czemu możesz zrobić coś takiego:
AlignedDimension x = o1 as AlignedDimension;
if (x != null)
// cieszymy sie
else
to nie jest AlignedDimension. Sprawdzić inne klasy
To dodaj do klasy Dimension te metody, które potrzebujesz, jako metody wirtualne, a w klasach pochodnych dodaj slowo override przed definicjami tych metod.
To co proponuje GBreal jest zupełnie niezgodne ze sztuką. Tzn. używa się tego w zupełnie innym celu.
public abstract void MyMethod(); - to dodaj w klasie Dimension
public override void MyMethod() -> tak ma to wyglądać w AlignedDimension i RotatedDimension
Potem np.
if(userChoice == 0)
Dimension dimension = new AlignedDimension();
else if (userChoice == 1)
Dimension dimension = new RotatedDimension();
dimension.MyMethod() -> w zależności jaką klasę przypisałeś do tej referencji klasy Dimension wykona się metoda z AlignedDimension() lub RotatedDimension()
A potem poczytaj o polimorfizmie i metodach wirtualnych.
http://pl.wikipedia.org/wiki/Metoda_wirtualna
@PaWeLoS
Jako, iż piszę dodatek pod AutoCADa to nie mam bezpośredniego dostępu do danych klas.
Muszę wykonać takie same operacje na obiekcie 1 lub 2, także chyba pozostanie mi upakowanie w metodę całego zaplecza i wrzucenie do ifa jak najmniejszej ilości kodu :)