1つのクラスに機能が集中してしまいコード量が多く大変見通し悪いソースコードになってしまいました。
機能ごとに別クラスに分割出来るのであれば良いのでしょうが、諸々の理由でそれが出来ないので同一クラスを別ファイルに分割することが出来る部分クラス(Partial Class)を試してみたいと思います。
ソースコード
ファイル名:Program.cs
namespace PartialDemo;
class Program1
{
static void Main()
{
var obj = new ClassA();
Console.WriteLine($"Name:{obj.Name} ID:{obj.ID}");
}
}
ファイル名:ClassA_Constructor.cs
partial class ClassA
{
public Guid ID {get; set;}
public ClassA()
{
this.ID = Guid.NewGuid();
this.Name = "hoge";
}
}
ファイル名:ClassA_Name.cs
partial class ClassA
{
public string Name {get; set;} = "";
}
実行
Name:hoge ID:ee0d1cb7-6ee3-4cc2-bb0a-285f457c8f67
ClassAのコンストラクタをClassA_Constructor.csファイルにNameプロパティをClassA_Name.csに分割してみました。
ClassA_Constructor.csのファイルに内に存在しないNameプロパティをコンストラクタで初期化出来ているあたり、なんとも変な気分になりますが、実行できているのでこれで良いのでしょう。
このpartial classどこかで見たような気がします。調べたところwinformのプロジェクトを作成すると出来上がるForm1クラスが、Form1.csとForm1.Designer.csの2つソースファイルで構成されていました。基本的にForm1.csをコーディングしてForm1.Designer.csは触らないようにしていたのですが、見た感じForm1.Designer.csではフォームの初期化処理が書いてあるようです。ファイル名(クラス名.機能?.cs)の命名法と合わせて参考にしたいと思います。
コメント