1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】共通クラスのインスタンスを使いまわす際のプラクティス

Posted at

共通クラスのインスタンスを別のクラスファイルで使いまわすときのベストプラクティスを書いておきます。

例えば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が状態を保持しないなら、設計として合理的

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?