2

私は次のことをしているとしましょう

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

何らかの理由で、このクラスのデフォルトをチェックしています。int型のデフォルトが0であるのと同じように、クラスのデフォルトを設定したいと思います。上記のクラスで、Somefieldのデフォルトを「hello」にします。 ;

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

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

4

6 に答える 6

5

いいえ。クラス(参照型)のデフォルトはnullオーバーロードされており、オーバーロードすることはできません。

于 2009-06-18T17:43:07.753 に答える
5

Tのdefault(T)を変更することはできません。参照型の場合は常にnullであり、値型の場合は「空」の値です(つまり、構造体の場合、すべてのメンバーはデフォルトの初期化されていない値になります)。

于 2009-06-18T17:44:26.877 に答える
3

default(T)をオーバーロードする方法はありません。

私には、.NETにまだ存在していないnull許容でない参照型を要求しているように思えます。実装については、こちらをご覧ください:http: //msmvps.com/blogs/jon_skeet/archive/2008/10/06/non-nullable-reference-types.aspx

于 2009-06-18T17:49:12.640 に答える
0

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

void SomeMethod<T>(T something) where T : new()
    {
        T newObject = new T();
    }
于 2009-06-18T19:39:16.693 に答える
0

クラス(参照型)の場合、デフォルトのキーワードはクラスのメンバーに対して何もしません。参照全体をnullに設定するだけです。

于 2009-06-18T17:46:31.867 に答える
-1

これでうまくいくはずです:

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

これで、そのクラスのインスタンスを作成すると、someFieldの初期値はhelloになります。

[編集:これはあなたが望むことを完全には行いません。他の人がコメントで指摘しているように、Tがクラスであるdefault(T)は常にnullになります。

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

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

]

于 2009-06-18T17:43:29.483 に答える