3

MEF フレームワークを使用してプラグインを作成するプログラムを作成しています。プラグインの 1 つで変数を設定しようとすると、スタック オーバーフロー例外が発生します。

プラグインの変数は次のように定義されますpublic string bnick {get {return bnick;} set {bnick = value;}}

メインプログラムの呼び出しコード:

 public void SetUpPlugins()
        {
        foreach (Plugin p in plugins)
            {
            p.bnick = nick;
            p.HostProgram = this;
            }
        }

デバッガーを使用して、この行p.bnick = nickが 1 回しか呼び出されていないことを確認しました。そして、次の行に到達することはありません。

これがスタックをいっぱいにするのはなぜですか?どうすれば修正できますか?

4

2 に答える 2

3
public string bnick {get {return bnick;} set {bnick = value;}} 

bnickここでは、setter の本体で再度割り当てを行っており、スタック オーバーフローが発生しています。代わりに、次のようなインスタンス変数を作成するつもりでしたか

private string bnick = "";
public string Bnick 
{
  get 
  { 
   return bnick;
  } 
  set 
  { 
    bnick = value;
  }
} 

注: C# では、PascalCase でプロパティを記述するのが慣例です。

于 2013-06-29T20:51:03.480 に答える
1

問題は、ゲッターとセッターが再帰的に自分自身を呼び出していることです。これを試して:

private string _bnick;
public string bnick 
{ 
    get { return this._bnick; }
    set { this._bnick = value; }
}

または、より簡単に、自動実装プロパティを使用して、この種の問題を回避します。

public string bnick { get; set; }

Femaref指摘するように、C# のコーディング ガイドラインに従うには、次のようにする必要があります。

public string Bnick { get; set; }
于 2013-06-29T20:51:21.310 に答える