Pośrednia konwersji powinien być określony jedynie wtedy, gdy typ może być przekształcony lub (korzystnie i) do innego typu z bez strat danych. Innym kryterium jest to, że niejawne konwersje powinny być dość tanie, ponieważ deweloper korzystający z Twojej klasy prawdopodobnie nie będzie świadomy, kiedy nastąpią niejawne konwersje.
Jeden przykład: konwersja między układami współrzędnych. Na przykład biegunowy wektor współrzędnych, który może przekształcić się we współrzędne kartezjańskie, może być wygodny. Jednak z powodu zaokrąglenia zmiennoprzecinkowego lepiej byłoby pozostawić to jako konwersję jawną, aby programista musiał typograficznie wymusić konwersję.
Konieczna jest konwersja niejawna, jeśli istnieją dwa typy danych przechowujące dane w tym samym formacie, ale jedyne rozróżnienie między typami jest semantyczne - w jaki sposób są używane lub co oznaczają. Przykład w realnym świecie: Konwersja między typami danych datetime, które mają taką samą (lub zgodną) reprezentację podstawową, ale różnią się jedynie datą rozpoczęcia epoc. Znajdziesz je podczas migracji starszych baz kodów do nowszych frameworków, gdzie oba definiują typ datetime, ale semantyka jest nieco inna. Niejawna konwersja tutaj (zakładając, że w ogóle nie ma utraty danych) jest prawdopodobnie w porządku i jest to dobry pomysł.
Jeśli masz zestaw typów i zdefiniowałeś własne reguły dotyczące konwersji typów między sobą, to niektóre z tych konwersji mogą być niejawne, a niektóre jawne w zależności od "wagi" konwersji. Podstawową instancją, w której wykorzystałem niejawną konwersję podczas implementacji klasy w .NET, była implementacja semantyki Win32 Variant dla biblioteki wykonawczej Delphi. Język Win32 i język Delphi określają liczbę konwersji na danych Variant, które można wykonać w sposób dorozumiany.
To, że nie znalazłeś potrzeby tworzenia niejawnych konwersji, jest w rzeczywistości dobrą rzeczą. Tylko dlatego, że nie może to oznaczać, że powinieneś. Konwersje w sposób niejawny istnieją w .NET głównie w celu umożliwienia różnym językom programowania reprezentowania ich własnej semantyki w sposób, który powinien być interoperacyjny i zrozumiały dla innych języków .NET.
Nie mogę myśleć o żadnych prawdziwych przyczynach poza tym, co jest już dostarczane za pośrednictwem typów numerycznych .NET. – leppie
To powinno być wiki społecznościowe (brak ostatecznej odpowiedzi). Lub przeredagowany, aby zapytać, kiedy i dlaczego należy, a czego nie. To byłoby lepsze. –
@Martinho Odpowiedź została już zaakceptowana i nadal nie jest to wiki społecznościowe, więc myślę, że straciłem wszelką nadzieję. :) – bzlm