執筆者: インフラジスティックス・ジャパン株式会社 池原 大然

動作確認環境: Visual Studio 2010、.NET Framework 2.0、Windows 7 Ultimate 64 bit

更新日: 2010 年 10 月 22 日


.NET Framework 2.0 以降ではクラス宣言時に partial 句を追加することによりクラス定義を別ブロックや別ファイルなどに分離させることが可能です。この仕組みを使用すると複数の実装者で単一クラス実装が行えたり、自動生成ソース使用時に予め partial 宣言を行ったクラスを用意しておくことでコード追加を容易にしたります。ただし、同一のアセンブリ、またはモジュールで定義される必要があり、コンパイル時に分離されたすべての部分が使用できる必要があります。また、同じアクセシビリティを持つ必要があります。

birthDate という DateTime 型のプロパティをもつ Person クラスを 2 個のファイルに分割し実装したコードは下記の通りです。

C#
// Person.cs
public partial class Person
{
    private DateTime birthDate;
    public Person(DateTime bDate)
    {
        birthDate = bDate;
    }
    public string DatesFromBirthDate()
    {
        return (DateTime.Today - birthDate).Days.ToString();
    }
}
 
C#
// Person.partial.cs
public partial class Person
{
    public string DatesFromThisBirthDate()
    {
        return (DateTime.Today 
            - new DateTime(DateTime.Today.Year, birthDate.Month, birthDate.Day)).Days.ToString();
    }
}
 

上記 Person クラスを使用したサンプル コード並びに実行結果は下記の通りです。

C#
using System;

namespace CodeRecipe_PartialClass_CS
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person(new DateTime(1978, 8, 13));
            // Person.cs に実装されたメソッド
            Console.WriteLine("誕生から {0} 日経過しています。", p.DatesFromBirthDate());
            // Person.prtial.cs に実装されたメソッド
            Console.WriteLine("今年の誕生日から {0} 日経過しています。", p.DatesFromThisBirthDate());
            Console.ReadKey();
        }
    }
}
 

誕生から 11740 日経過しています。
今年の誕生日から 52 日経過しています。

Visual Studio 2010 ではこの partial 定義を用いることで部分メソッドを実装することも可能です。

関連リンク


Code Recipe Code Recipe

ページのトップへ