[C#]演算子オーバーロードを使用して、オブジェクトの条件分岐をシンプルに記述する

あるクラスのオブジェクトの状態をチェックしたい場合、比較式をクラスのメソッドとして実装して確認する事が有ります。

class Score {
    public int value;
    public Score( int i ) {
        value = i;
    }
 
    public bool isValid() {
        // 値が0~100のときのみ有効とみなす
        if ( value >= 0 && value <= 100 ) {
            return true;
        } false {
            return false;
        }
    }
}
 
static void Main() {
    var s = new Score(-1);
    if( s.isValid() ) {
        Console.Write( "It worked!" );
    }
}





上記のプログラムですが、演算子オーバーロードを使用すると、チェック処理をシンプルに記述できます。
これには、if内で記述したオブジェクトに対する暗黙の型変換の機能を利用します。

サンプル:

class Score {
    public int value;
    public Score( int i ) {
        value = i;
    }
 
    public static implicit operator bool( Foo f ) {
        // 値が0~100のときのみ有効とみなす
        if ( value >= 0 && value <= 100 ) {
            return true;
        } false {
            return false;
        }
    }
}
 
static void Main() {
    var s = new Score(-1);
    if( s ) {
        Console.Write( "It worked!" );
    }
}



“implicit operator bool”で、bool型への型変換を定義しています。
これによって条件式が”if ( s )”だけのシンプルな記述になりました。

演算子オーバーロードは、乱用するとかえってコードの可読性が低くなってしまう危険もありますが、状況によっては上記のサンプルのようにコードをすっきりさせる事もできます。

関連記事

コメントを残す

メールアドレスが公開されることはありません。