struct
複素数用があります。私は次のようなものを実行できるようにしたい:
Complex a = new Complex( 3, 5 );
Console.WriteLine("|a| = {0}", |a|);
作成は|a|
可能ですか?もしそうなら、どのように?
struct
複素数用があります。私は次のようなものを実行できるようにしたい:
Complex a = new Complex( 3, 5 );
Console.WriteLine("|a| = {0}", |a|);
作成は|a|
可能ですか?もしそうなら、どのように?
オーバーロード可能な演算子 (C# プログラミング ガイド)には、次のオーバーロード可能な演算子が一覧表示されています。
C# では、operator キーワードを使用して静的メンバー関数を定義することにより、ユーザー定義型で演算子をオーバーロードできます。ただし、すべての演算子をオーバーロードできるわけではなく、次の表に示すように制限があるものもあります。
+、-、!、~、++、-、true、false
これらの単項演算子はオーバーロードできます。+、-、*、/、%、&、|、^、<<、>>
これらの二項演算子はオーバーロードできます。==、!=、<、>、<=、>=
比較演算子はオーバーロードできます (ただし、この表の後の注を参照してください)。&&, ||
条件付き論理演算子はオーバーロードできませんが、オーバーロードできる & および | を使用して評価されます。[]
配列インデックス演算子はオーバーロードできませんが、インデクサーを定義できます。(T)x
キャスト演算子はオーバーロードできませんが、新しい変換演算子を定義できます (明示的および暗黙的を参照)。+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
代入演算子はオーバーロードできませんが、たとえば += は + を使用して評価されます。過負荷になる可能性があります。=、.、?:、??、->、=>、f(x)、as、checked、unchecked、default、delegate、is、new、sizeof、typeof
これらの演算子はオーバーロードできません。
新しい演算子を定義することはできません。
並べ替え、|a| は使用できません。上記のような構文ですが、基本的な出力の ToString() メソッドをオーバーライドしたり、カスタム プロパティを作成して、出力したい形式を生成したりできます。たとえば、次のクラス定義を使用します。
public class Complex
{
public int Real { get; protected set; }
public int Imag { get; protected set; }
public Complex(int a, int b)
{
Real = a; Imag = b;
}
public override string ToString()
{
return string.Format("{0} + {1}i", Real, Imag);
}
public string AbsoluteValue
{
get { return string.Format("sqrt({0}² + {1}²)", Real, Imag); }
}
}
次のようなことができます。
static void Main(string[] args)
{
Complex c = new Complex(2, 6);
Console.WriteLine(c);
Console.WriteLine(c.AbsoluteValue);
}
次のような出力を生成するには:
2 + 6i
sqrt(2² + 6²)