C# で代入演算子をオーバーロードする

Muhammad Zeeshan 2023年10月12日
  1. C# での演算子のオーバーロード
  2. 暗黙的な変換演算子を使用して C# で代入演算子のオーバーロードを実装する
C# で代入演算子をオーバーロードする

この記事では、C# を使用して代入演算子をオーバーロードする方法について説明します。 まず、演算子のオーバーロードを見てみましょう。

C# での演算子のオーバーロード

組み込み演算子を再定義する方法は、演算子のオーバーロードと呼ばれます。 一方または両方のオペランドがユーザー定義型の場合、さまざまな操作のユーザー定義実装を作成できます。

暗黙的な変換演算子を使用して C# で代入演算子のオーバーロードを実装する

暗黙的な変換操作を開発できます。 それらを不変の構造体にすることは、もう 1つの賢明な方法です。

プリミティブはまさにそれであり、それがそれらから継承することを不可能にしています。

以下の例では、暗黙的な変換演算子を、加算およびその他の演算子と共に開発します。

  • まず、次のライブラリをインポートします。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text.RegularExpressions;
    
  • Velocity という名前の構造体を作成し、value という double 変数を作成します。
    public struct Velocity {
      private readonly double value;
    }
    
  • Velocity に、変数をパラメーターとして受け取る public Velocity を作成するように指示します。
    public Velocity(double value) {
      this.value = value;
    }
    
  • 次に、暗黙の演算子 Velocity を作成します。
    public static implicit operator Velocity(double value) {
      return new Velocity(value);
    }
    
  • 次に、オーバーロードする Addition および Subtraction 演算子を作成します。
    public static Velocity operator +(Velocity first, Velocity second) {
      return new Velocity(first.value + second.value);
    }
    public static Velocity operator -(Velocity first, Velocity second) {
      return new Velocity(first.value - second.value);
    }
    
  • 最後に、Main() メソッドで、Velocity のオブジェクトを呼び出してオーバーロードします。
    static void Main() {
      Velocity v = 0;
      v = 17.4;
      v += 9.8;
    }
    

完全なソース コード:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

public struct Velocity {
  private readonly double value;

  public Velocity(double value) {
    this.value = value;
  }
  public static implicit operator Velocity(double value) {
    return new Velocity(value);
  }
  public static Velocity operator +(Velocity first, Velocity second) {
    return new Velocity(first.value + second.value);
  }
  public static Velocity operator -(Velocity first, Velocity second) {
    return new Velocity(first.value - second.value);
  }
}

class Example {
  static void Main() {
    Velocity v = 0;
    v = 17.4;
    v += 9.8;
  }
}
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn

関連記事 - Csharp Operator