我正在使用MEF框架编写程序来创建插件。尝试在其中一个插件中设置变量时,出现堆栈溢出异常。

插件中的变量定义为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仅被调用一次。而且它永远不会到达下一行。

为什么这会填满堆栈,我该如何解决?

最佳答案

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


在这里,您要在设置器的主体中再次分配bnick,从而导致堆栈溢出。您是否打算创建实例变量,例如

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


注意:在C#中,约定是在PascalCase中编写属性。

关于c# - 设置变量时堆栈溢出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17384530/

10-10 11:01