1 つ目は、期待するほど単純ではありません。次に例を示します。
using System;
class Test
{
static void Main()
{
long firstLong = long.MaxValue - 2;
long secondLong = firstLong - 1;
double firstDouble = firstLong;
double secondDouble = secondLong;
// Prints False as expected
Console.WriteLine(firstLong == secondLong);
// Prints True!
Console.WriteLine(firstDouble == secondDouble);
}
}
個人的には、独自の暗黙的な変換を作成することはほとんどありません。フレームワークに含まれているものには十分満足していますが、独自のものを追加することで生活が良くなるとはほとんど感じません. (同じことが一般的な値型にも当てはまります。)
編集:実際に質問に少し答えるために、Microsoft クラス ライブラリ設計ガイドラインの変換演算子の部分を読む価値があるでしょう。