rksoftware

Visual Studio とか C# とかが好きです

C# 2.0 以降の新機能の確認 - C# 3.0 - Partial メソッド

C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。

Partial メソッド

 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/partial-method
 Partial クラスの定義時にメソッドのシグネチャと実装を分けられる。定義できるメソッドは void を返す private メソッドのみ。

class Program
{
    static void Main(string[] args)
    {
        new A().Method();           // 実装がないので何も出力されない
        Console.WriteLine("====="); // =====
        new B().Method();           // Class B Method
    }
}

// クラス A の PartialMethod メソッドのシグネチャの定義
partial class A
{
    internal void Method()
    {
        this.PartialMethod("Class A Method");
    }

    // メソッドのシグネチャの定義 実装はここにはない
    partial void PartialMethod(string text);
}

// クラス A の PartialMethod メソッドのシグネチャの実装
partial class A
{
    // メソッドのシグネチャの実装 これは実装のないパターン
    //partial void PartialMethod(string text)
    //{
    //    Console.WriteLine(text);
    //}
}

// クラス B の PartialMethod メソッドのシグネチャの定義
partial class B
{
    internal void Method()
    {
        this.PartialMethod("Class B Method");
    }

    // メソッドのシグネチャの定義 実装はここにはない
    partial void PartialMethod(string text);
}

// クラス B の PartialMethod メソッドのシグネチャの実装
partial class B
{
    // メソッドのシグネチャの実装 これは実装のあるパターン
    partial void PartialMethod(string text)
    {
        Console.WriteLine(text);
    }
}