2009-09-02 32 views
6

Kiedy można bezpiecznie używać niejawnego przesyłania?Kiedy należy używać niejawnego przesyłania?

Przypadek użycia: Pracuję z zestawem obiektów com, które wymagają szczególnej uwagi (Marshal.ReleaseComObject). Czy można utworzyć klasę wrapper, która niejawnie konwertuje z powrotem do rzeczywistego obiektu COM?

Jakie są sytuacje, kiedy nie powinien używać używania niejawnego przesyłania?

+4

Wystarczy być wybredny: nie ma czegoś takiego jak „casting” niejawny. Możesz użyć operatora * cast *, aby kompilator wykonał * jawną konwersję *, lub możesz pominąć operatora obsady i przeprowadzić * niejawną konwersję *, ale nie ma * niejawnego rzutu *. * Cast * jest tym, co pojawia się w kodzie źródłowym; jeśli się tam nie pojawi, wtedy nie ma * rzucania *. –

Odpowiedz

1
  1. Musisz wykonać tę obsadę bardzo często.
  2. Nie ma sposobu na uniknięcie obsady.
  3. Nie jest lepiej reprezentowany jako funkcja konwersji/projekcji. Innymi słowy, po obsadzie musi to być "ten sam przedmiot".
  4. Możesz wrócić do oryginalnego obiektu w obie strony. (Nie bez przyczyny.)
  5. Nie będzie bałagan z istniejącymi lub możliwymi przyszłymi przeciążeniami funkcji.

Zazwyczaj podsumować te punkty jak „nigdy”, ale jak na ironię Twój przypadek użycia rzeczywiście brzmi jak nawiązań ...

3

Należy użyć odlewania niejawny kiedy (i tylko wtedy) masz pewność, że: 1. Nie
informacje (dane) jest tracona (lub mogą zostać utracone) podczas konwersji.
2. Nie można zgłaszać wyjątków.
3. Nie może wystąpić cichy błąd (otrzymasz zdegenerowane dane).

Powiązane problemy