Cast always works - truncates the number being cast to different data type
and may result into an invalid value. Cast operation will not throw exception.
e.g.
double d 123456789.1234;short i (short)d;
Console.WriteLine(i);
int j Convert.ToInt16(d);
Console.WriteLine(j);
The cast works and gives a meaningless negative value as output.
Convert.ToInt16 results into OverflowException being thrown.
Sometimes this is desirable since the errors generated due to wrong truncating
are hard to detect.
Other differences are some casts like casting from string to int is not allowed.
But Convert functions are available which do this conversion.