6

今日私に例が示されました.次の両方が実際に同じ効果があるかどうかを確認したかったのですが、そうではありません.それらの違いは何ですか.

これは:

private static Service1Client _myFoo;

static ServiceLayer()
{
    MyFoo = new Service1Client();
}

public static Service1Client MyFoo
{
    get { return _myFoo; }
    set { _myFoo = value; }
}

これを行うためのちょうど長い方法:

public static Service1Client _myFoo
{
    get { return _myFoo; }
    set { _myFoo = value; }
}

static ServiceLayer()
{
    _myFoo = new Service1Client();
}

そうでない場合、それらの違いは何ですか?

ありがとう。

4

3 に答える 3

10

次の理由により、バッキング フィールドが必要です。

public static Service1Client _myFoo
{
    get { return _myFoo; }
}

....あなたの例のように、永遠にループします。

ただし、C# は自動プロパティを提供します。次の単純なコードで同じことを実現できます。

public static Service1Client MyFoo { get; set; }

static ServiceLayer()
{
    MyFoo = new Service1Client();
}
于 2013-01-24T18:42:25.123 に答える
3

このコードを考えると:

public static Service1Client _myFoo
{
    get { return _myFoo; }
    set { _myFoo = value; }
}

StackOverflowExcpetionセッターが自分自身を呼び出したり、自分自身を呼び出したりするため、ゲッターまたはセッターを使用するといつでも取得できます(スタックスペースが不足するまで)。

最初の例をうまく短縮する1つの方法は、次のとおりです。

public static Service1Client MyFoo {get;set;}

static ServiceLayer()
{
    MyFoo = new Service1Client();
}
于 2013-01-24T18:45:05.123 に答える
3

ほとんどですが、違います。パブリック プロパティでは、取得および設定しているオブジェクトを返すことはできません。バッキングフィールドが必要です。

private static Service1Client _myFoo
public static Service1Client MyFoo
{
     get { return _myFoo; }
     set { _myFoo = value; }
}

この場合、基本的な get と set しか実行していないため、auto プロパティを使用できます。これは上記のコードと同等です。

public static Service1Client MyFoo { get; set; }
于 2013-01-24T18:43:22.493 に答える