コンストラクタ・静的クラス・抽象クラス・部分クラス (4/4)
作成:2013-08-17 10:51
更新:2013-08-17 10:51
更新:2013-08-17 10:51
■partialによる部分クラス
クラスというのは、さまざまな処理をひとまとめにして定義します。複雑なクラスになってくると、そこに組み込まれるメソッドもたくさんに増えてきます。また大掛かりな開発になると、複数の人間でクラスの定義を行うようなこともあるかも知れません。そうなると、1つのクラスに延々とメソッドの定義が並び、それを複数の人間がメンテナンスしていく、なんていう悪夢のような状況が発生します。
こんなとき、「クラスを複数に分割して作る」ということができればずいぶんと楽になると思いませんか? それを可能にするのが「部分クラス」というものです。
部分クラスは、文字通り「クラスをいくつかの部分に分割して定義するもの」です。これは「partial」というものを使って定義します。
下にごく簡単な例を挙げておきます。ここでは「Person」というクラスを定義していますが、よく見るとクラスの定義が2つあることがわかるでしょう。2つに分かれていますが、実際にPersonクラスを利用する際には、それらをまとめて1つのクラスとして扱えるようになっています。
ここでは1箇所に用意していますが、もちろん部分クラスをそれぞれ別ファイルに作成することも可能です。クラスが複雑化しても、それをいくつかに切り分けて整理し開発すれば、ずいぶんとメンテナンスもしやすくなりますね。
注意すべきは、「2つのクラス定義のどちらにもpartialが宣言してある」という点です。ということは、部分クラスとして作成するクラスは、最初からすべてpartialでなければいけない、という点です。例えば、既にあるクラスに部分クラスを使って機能を付け足す、というようなことはできないのです。
こんなとき、「クラスを複数に分割して作る」ということができればずいぶんと楽になると思いませんか? それを可能にするのが「部分クラス」というものです。
部分クラスは、文字通り「クラスをいくつかの部分に分割して定義するもの」です。これは「partial」というものを使って定義します。
partial class クラスこんな具合に、classの手前にpartialを記述します。こうすると、このクラスは「部分クラス」として作成されるようになります。部分クラスとして作成されたものは、他の場所でいくつも部分クラスを作ることができます。そしていくつ用意しても、それらはすべてまとめて1つのクラスとして機能するようになるのです。
{
……略……
}
下にごく簡単な例を挙げておきます。ここでは「Person」というクラスを定義していますが、よく見るとクラスの定義が2つあることがわかるでしょう。2つに分かれていますが、実際にPersonクラスを利用する際には、それらをまとめて1つのクラスとして扱えるようになっています。
ここでは1箇所に用意していますが、もちろん部分クラスをそれぞれ別ファイルに作成することも可能です。クラスが複雑化しても、それをいくつかに切り分けて整理し開発すれば、ずいぶんとメンテナンスもしやすくなりますね。
注意すべきは、「2つのクラス定義のどちらにもpartialが宣言してある」という点です。ということは、部分クラスとして作成するクラスは、最初からすべてpartialでなければいけない、という点です。例えば、既にあるクラスに部分クラスを使って機能を付け足す、というようなことはできないのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
using System;
namespace myapp
{
class Program
{
public static void Main(string[] args)
{
Person p = new Person();
p.name = "tuyano";
p.age = 123;
p.print();
p.printAll();
Console.ReadKey(); // キーを押すまで待つ
}
}
public partial class Person
{
public string name;
public void print()
{
Console.WriteLine("my name is " + name);
}
}
public partial class Person
{
public int age;
public void printAll()
{
Console.WriteLine("my name is " + name + ". I'm " + age + " old.");
}
}
}
※関連コンテンツ