Definiowanie własnego operatora rzutowania

Witam
Ostatnio modyfikując mój kod stanąłem przed problemem rzutowania obiektu typu MembershipUser(z namespaca System.Web.Security) na mój własny typ UserDTO. Klasa UserDTO nie wyróżnia się niczym specjalnym i wygląda następująco

Podejściem dość oczywistym w takim przypadku jest utworzenie odpowiedniego konstruktora w klasie UserDTO, przyjmującego jako parametr obiekt typu MembershipUser. Jednakże można również utworzyć własny operator rzutowania, dzięki któremu zapis

będzie poprawny. Wszystko sprowadza się do użycia dwóch słów kluczowych:

  • operator
  • explicit

W klasie UserDTO musimy dopisać następujący kod

Jak widać tworzymy nowy operator konwersji, w którym po prawej stronie wyrażenia musi stać obiekt typu MembershipUser. Od teraz za każdym razem gdy będziemy chcieli rzutować obiekt MembershipUser na UserDTO będziemy mogli posłużyć się następującą konstrukcją.

>
Rzutowanie z UserDTO na MembershipUser nie jest dozwolone (przy wykorzystaniu wyżej wymienionego kodu), ale nic nie stoi na przeszkodzie aby zdefiniować drugi operator rzutowania

który zapewni nam konwersję odwrotną

Definiowanie własnego operatora rzutowania

One thought on “Definiowanie własnego operatora rzutowania

  1. Tylko nie wiem czy przeciążanie operatorów rzutowania w ogóle ma sens. Dla większości przypadków jest to po prostu kolejny sposób jak ukryć logike (być może zawierającą błąd) przed programistą czytającym kod. Znacznie lepszym przykładem byłoby rzutowanie własnego value-type Money na decimala.

Comments are closed.