2011-11-09 69 views
-1

我正在编写一个代码,用于在C#中设置属性并获取异常。C#中的StackoverFlowException#

public class person 
{ 
    public string name 
    { 
     set 
     { 
      name = value; 
     } 
     get 
     { 
      return name; 
     } 
    } 

    public static void Main() 
    { 

     person p = new person(); 
     p.name = "Bilal"; 

     Console.WriteLine(p.name); 
    } 
} 
+0

它的存在已经:)) – DarthVader

+0

请告诉我错误在此代码。 – Smoker

回答

14

你有无限递归在你的财产 - 你的setter方法调用自身,直到你得到一个堆栈溢出:

set 
    { 
     name = value; 
    } 

而是要么使用auto-property(建议,如果你不需要直接访问支持字段,并没有做任何其他操作您的getter/setter方法):

public string name {get;set;} 

或者使用支持字段:

private string _name; 
public string name 
{ 
    set 
    { 
     _name = value; 
    } 
    get 
    { 
     return _name; 
    } 
} 
+0

我该如何处理它? – Smoker

+0

@ user1037750 BrokenGlass是正确的;按照他的解决方案您也可以考虑将该属性重命名为'Name',以便遵循C#命名约定。 – dlev

+0

同意 - 公共财产应该大写(并在需要的地方放置骆驼) – BrokenGlass

5

您的属性名称和您的字段名称相同(“名称”)。大写属性名称。

或者只是切换到自动道具:

public class Person 
{ 
    public string Name { get; set; } 
} 
+0

没有领域只有一个属性 –

2

只需使用

private string _name; 
    public string Name 
    { 
     set 
     { 
      _name = value; 
     } 
     get 
     { 
      return _name; 
     } 
    } 

为了避免这个问题,必须弄清楚发生了什么。

1

你需要的东西是这样的:

string name; 
public string Name 
    { 
     set 
     { 
      name = value; 
     } 
     get 
     { 
      return name; 
     } 
    }