共通クラスのインスタンスを別のクラスファイルで使いまわすときのベストプラクティスを書いておきます。
例えばCommon
クラスのログを出力する関数であるLog_Write
関数をSample
クラスで使用したい場合のコードです。
Sample.cs
namesapece XXX {
public class SampleMethodA{
public void process1(){
Common cmn = new Common();
cmn.Log_Write("AAA");
}
public void process12(){
Common cmn = new Common();
cmn.Log_Write("BBB");
}
}
}
Common.cs
namesapece XXX{
public class Common{
public void Log_Write(string message){
Console.Writeline(message);
}
}
}
上記のコードはもっとスマートに改善できるのでその改善したコードは下記に載せておきます。
🔸1. 共通インスタンスが使い回されるなら、クラス変数として持つ
Sample.cs
namespace XXX {
public class SampleMethodA {
private Common cmn = new Common(); // フィールドとして定義(1回だけ生成)
public void process1() {
cmn.Log_Write("AAA");
}
public void process12() {
cmn.Log_Write("BBB");
}
}
}
🔹理由:
Common
は毎回new
せずとも、同じロジック(ログ出力)をするだけなので1つあれば十分。
フィールドで定義すれば、複数メソッド間で再利用可能です。
処理効率もよく、コードがシンプルになります。
🔸2. ログ機能だけなら、Common.Log_WriteをstaticにしてもOK
ログが 状態を持たない処理(ただ出力するだけ)であれば、staticメソッドにする方が自然な場合もあります。
Sample.cs
namespace XXX {
public class SampleMethodA {
public void process1() {
Common.Log_Write("AAA");
}
public void process12() {
Common.Log_Write("BBB");
}
}
}
Common.cs
namespace XXX {
public class Common {
public static void Log_Write(string message) {
Console.WriteLine(message);
}
}
}
🔹この方法のメリット:
毎回インスタンスを作る必要がない
コードが簡潔
Commonが状態を保持しないなら、設計として合理的