1

struct複素数用があります。私は次のようなものを実行できるようにしたい:

Complex a = new Complex( 3, 5 );
Console.WriteLine("|a| = {0}", |a|);

作成は|a|可能ですか?もしそうなら、どのように?

4

2 に答える 2

3

オーバーロード可能な演算子 (C# プログラミング ガイド)には、次のオーバーロード可能な演算子が一覧表示されています。

C# では、operator キーワードを使用して静的メンバー関数を定義することにより、ユーザー定義型で演算子をオーバーロードできます。ただし、すべての演算子をオーバーロードできるわけではなく、次の表に示すように制限があるものもあります。

+、-、!、~、++、-、true、false
これらの単項演算子はオーバーロードできます。

+、-、*、/、%、&、|、^、<<、>>
これらの二項演算子はオーバーロードできます。

==、!=、<、>、<=、>=
比較演算子はオーバーロードできます (ただし、この表の後の注を参照してください)。

&&, ||
条件付き論理演算子はオーバーロードできませんが、オーバーロードできる & および | を使用して評価されます。

[]
配列インデックス演算子はオーバーロードできませんが、インデクサーを定義できます。

(T)x
キャスト演算子はオーバーロードできませんが、新しい変換演算子を定義できます (明示的および暗黙的を参照)。

+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
代入演算子はオーバーロードできませんが、たとえば += は + を使用して評価されます。過負荷になる可能性があります。

=、.、?:、??、->、=>、f(x)、as、checked、unchecked、default、delegate、is、new、sizeof、typeof
これらの演算子はオーバーロードできません。

新しい演算子を定義することはできません。

于 2012-10-24T20:23:16.520 に答える
0

並べ替え、|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²)
于 2012-10-24T20:34:39.993 に答える