Rzutowanie własnych obiektów.

0

Witam wszystkich

Mam ciekawy problem: chciałem rzutować stworzony przez siebie obiekt na inny także stworzony przez siebie np.

 
class Obiekt1 { public string imie; public string wiek; }
class Obiekt2 { public string imie; public string wiek; }
Obiekt1 o1 = new Obiekt1();
Obiekt2 o2 = new Obiekt2();
 o1 = (Obiekt1)o2;

ale nie mogę, chociaż teoretycznie powinny do siebie pasować.
Czy takie coś jest w ogóle możliwe?

1

A praktycznie to dwie zupełnie różne klasy, bo identyfikowane są między innymi po nazwie (oraz assembly, w którym się znajduje; żeby nie było, dwie identyczne klasy w dwóch dll nie są identyczne). Klasa w .NET nie jest równoważna szeregowi bajtów, nie można od tak zamieniać jej na inną.

To, co napisałeś jest możliwe do wykonania, gdy dopiszesz operator rzutowania pomiędzy tymi typami.

0

Cenna uwaga. Może jakaś wskazówka odnośnie tego gdzie miałbym szukać tego "operatora rzutowania"?
Chyba znalazłem - niejawna i jawna konwersja powinna rozwiązać ten przypadek. Dzięki za wskazówkę :).

1

public static implict operator Obiekt1(Obiekt2) czy jakoś tak. ;)

0

public static implict operator Obiekt1(Obiekt2) czy jakoś tak. ;)

Tak - właśnie w zasadzie tutaj jest niezły tutorial.

 
    class Obiekt1
    { 
        public string imie;
        public static implicit operator Obiekt1(Obiekt2 o2)
        {
            Obiekt1 o1 = new Obiekt1();
            o1.imie = o2.imie;
            return o1;
        }
    }
    class Obiekt2 { public string imie; }

I można zrobić:

 
Obiekt1 o1 = new Obiekt1();
Obiekt2 o2 = new Obiekt2();
o1 = (Obiekt2)o2;

Jak zwykle można na Was liczyć.
Myślę, że temat jest zakończony.

1

Tylko, że trzeba wiedzieć gdzie tego używać, bo nadużywanie tego to jest kupa.

0

Ewentualnie możesz sobie zaimplementować coś po RealProxy. W skrócie wygląda to tak że wrappujesz pewien obiekt, imitując że jest on czymś innym. Fajne ma to możliwości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1