C〓〓2.0の泛型を使って単例のモードの重用を実現します.
紹介する
多くの異なる開発背景を持っている人は一例モデルに詳しいです.彼らは毎回同じコードを書かなければならないことを発見します.新しいC〓〓〓2.0の泛型を使って、一回だけ同じコードを書くことができます.
C〓〓2.0の汎型を使って単例モードの重用を完成します.
C〓〓2.0の泛型を使って、私の言った「単例提供者」を実現することが可能になります.これは、単一のインスタンスを作成するために使用することができますが、各特定のクラスのために単一の例のモードコードを書き換える必要がない、という重用可能なクラスです.このように一例の構造のコードを分離することは、一例のモードでクラスを使用するか、あるいは一例のモードでクラスを使用しないかの柔軟性を維持するのに役立ちます.
では、どのように単例提供者を利用しますか?それをクリアするためには、テストクラスを書く必要があります.このテストクラスは二つの部分があります.第一部は、デフォルトのコンストラクタで、timestamp変数の値を設定します.第二の部分は、「Debug.Writeline」でtimestampを出力する値を実現するための公共関数です.このテストクラスは、スレッドがいつでも同じ値に戻るという意味です.
超スレッドの二重プロセッサーで100スレッドを使って単状態モードでテストしました.すべてのスレッドは同じ値を返します.これはスレッドが安全に汎型を使用して実現される単一状態モードであることを示しています.これはもう十分に汎型がコードの簡略化を助けてくれると信じています.
From:
http://www.ninedns.com/asp.net/2007102520336.html
多くの異なる開発背景を持っている人は一例モデルに詳しいです.彼らは毎回同じコードを書かなければならないことを発見します.新しい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