2009-06-18 18 views
2

は、私はこのクラスのデフォルトをチェックしていると私はのためのデフォルトを設定したい何らかの理由であなたはTは独自のクラス

public class A 
{ 
    private string _someField; 
    public string SomeField { get { return _someField; } } 
} 

を以下していると言うことができますで独自のデフォルトTを作成することができますint型のデフォルトが0であるのと同じように、私は上記のクラスで、Somefieldのデフォルト値を "hello"にしたいと思います。

int i = default(int); // i is 0 
A myClass = default(A); 
string s = myClass.SomeField; // s is hello 

これは、実用的なアプリケーションではなく、私自身の理論的な満足のためのものです。ただ疑問に思う。

+0

私はあなたのいくつかは、defaultキーワードを使用すると、 –

答えて

3

デフォルト(T)をオーバーロードするの方法はありませんがnullに全体の参照を設定します。

私には、.NETにはまだ存在しないnullableではない参照型を求めているようです。 http://msmvps.com/blogs/jon_skeet/archive/2008/10/06/non-nullable-reference-types.aspx

+0

これは、Stefanの周りに興味深い方法です。構造体がnullでないことが前提です。 –

5

いいえ。クラス(参照型)のデフォルトはnullであり、オーバーロードできません。

+1

1を書いたコードをテスト が何であるかを知らないと思います。 default(T)== null T:class –

-1

これは、仕事をする必要があります:あなたは、そのクラスのインスタンスを作成するときに

public class A 
{ 
    private string _someField = "hello"; 
    public string SomeField { get { return _someField; } } 
} 

さて、someFieldの初期値はハローになります。

[編集: これはあなたが望むものではありません。他の人がコメントに書いたように、Tがクラスであるdefault(T)は常にnullになります。

代わりに 'default'キーワードを使用する代わりに、通常はクラスを作成します。

A myClass = new A(); 
string defaultValue = myClass.SomeField // This will be set to "hello" by default. 

]

+0

デフォルト(T)は常にnullです。デフォルトコンストラクタを呼び出した後の値です。 –

+0

myClassが参照解除されたときにnull参照例外が発生します。 –

+0

-1構造体の場合はおそらくTのデフォルトであり、T:classは常にnullです。 –

5
あなたはどのようなデフォルト(T)それは常に参照型の場合はnullであるT.ためのもので、値型のための「空」の値(すなわち構造体のためを変更することはできません

、すべてのメンバーは既定値で、未達成値です)。クラス(参照型)の場合は

+0

+1うまくやった。 –

0

デフォルトのキーワードは、クラスのメンバーのために何もしない、それだけで

0

default()は常にnullを返しますが、whereを使用すると、クラスにパラメータのないコンストラクタが含まれている必要があるため、newを呼び出すことができます。

void SomeMethod<T>(T something) where T : new() 
    { 
     T newObject = new T(); 
    } 
関連する問題