Wybacz, że posłużę się linkiem, ale musiałbym przetłumaczyć cały ten artykuł na polski aby wyczerpać temat:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/conversions
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/numeric-conversions
Myślę, że dwa powyższe linki (szczególnie polecam pierwszy!) powinny rozwiać wszelkie wątpliwości jak rzutowanie (jawne i niejawne) działa w c#, kiedy, co i jak.
Ja biorę się za lekturę, bo mimo, że wydawało mi się, że rozumiem temat, to widzę, że jest wiele kwestii o których nie miałem zielonego pojęcia. Także życzę Tobie i sobie - miłej lektury! 
