C〓〓2.0の泛型を使って単例のモードの重用を実現します.


紹介する
多くの異なる開発背景を持っている人は一例モデルに詳しいです.彼らは毎回同じコードを書かなければならないことを発見します.新しいC〓〓〓2.0の泛型を使って、一回だけ同じコードを書くことができます.
C〓〓2.0の汎型を使って単例モードの重用を完成します.
C〓〓2.0の泛型を使って、私の言った「単例提供者」を実現することが可能になります.これは、単一のインスタンスを作成するために使用することができますが、各特定のクラスのために単一の例のモードコードを書き換える必要がない、という重用可能なクラスです.このように一例の構造のコードを分離することは、一例のモードでクラスを使用するか、あるいは一例のモードでクラスを使用しないかの柔軟性を維持するのに役立ちます.
public sealed class Singleton
{
 Singleton()
 {}

 public static Singleton Instance
 {
  get
  {
   return SingletonCreator.instance;
  }
 }

 class SingletonCreator
 {
  // Explicit static constructor to tell C# compiler
  // not to mark type as beforefieldinit
  static Nested()
  {}

  internal static readonly Singleton instance = new Singleton();
 }
}
汎型の理解に基づいて、このコードの中でタイプパラメータを変えない理由がないことがわかります.一般的な「T」です.このようにすれば、このコードは次のようになります.
public class SingletonProvider<T> where T : new()
{
 SingletonProvider() { }

 public static T Instance
 {
  get { return SingletonCreator.instance; }
 }

 class SingletonCreator
 {
  static SingletonCreator() { }
  internal static readonly T instance = new T();
 }
}
ここでは汎型の制約が使用されていることに注意してください.この制約は任意のタイプの「T」に強制されます.パラメータなしの公共構造関数を持つ必要があります.ここではsingleton Creatorクラスを実装するタイプ'T'を許可します.
では、どのように単例提供者を利用しますか?それをクリアするためには、テストクラスを書く必要があります.このテストクラスは二つの部分があります.第一部は、デフォルトのコンストラクタで、timestamp変数の値を設定します.第二の部分は、「Debug.Writeline」でtimestampを出力する値を実現するための公共関数です.このテストクラスは、スレッドがいつでも同じ値に戻るという意味です.
public class TestClass
{
 private string _createdTimestamp;

 public TestClass ()
 {
  _createdTimestamp = DateTime.Now.ToString();
 }

 public void Write()
 {
  Debug.WriteLine(_createdTimestamp);
 }
}
このクラスは以下のように単例プロバイダを使います.
SingletonProvider<TestClass>.Instance.Write();
注目点
超スレッドの二重プロセッサーで100スレッドを使って単状態モードでテストしました.すべてのスレッドは同じ値を返します.これはスレッドが安全に汎型を使用して実現される単一状態モードであることを示しています.これはもう十分に汎型がコードの簡略化を助けてくれると信じています.
From:
http://www.ninedns.com/asp.net/2007102520336.html