如何使用{}代替;来设置属性?

时间:2012-08-20 20:18:23

标签: c# .net stack-overflow

这是一个有趣的小故事,我无法在网上找到。这个想法是,如果你有一个属性,如int a {get;组;它可以自己设定。

如何使用{get {} set {}}?

将属性设置为int

集合内部发生了什么;?

这是我尝试做的事情:

public string Symbol { get { return Symbol; } set { Symbol = value; NotifyPropertyChangedEvent("Symbol");  } }

但它显然会创建一个 Stack Overflow ,因为它本质上是一遍又一遍地调用自己。

而且我不想创建10-20个私有变量来与我的属性一起工作,我想知道集合中发生了什么;。

谢谢。

4 个答案:

答案 0 :(得分:10)

set;只会创建一个您看不到的私有变量。抱歉,你需要那些10-20个私有变量。

答案 1 :(得分:2)

您必须创建私有变量。

不幸的是,这是你在这里遇到的具体情况的唯一方法。

答案 2 :(得分:2)

它在编译时会为您生成一个支持字段。您无法通过intellisense访问它,因为它尚未创建。它等同于以下'尚未生成'_a'。

private int _a;
public int a
{
    get { return _a; }
    set { _a = value; }
}

但是,您可以简单地从类内部设置属性本身。

public int a { get; set; }

a = ...;

此外,如果您只想在内部设置修改器,可以在get和set上设置修改器;

public int a { get; private set; }

答案 3 :(得分:1)

如果您需要自定义逻辑,则需要自己提供支持字段:

private string symbol;
public string Symbol 
{ 
    get { return symbol; } 
    set { symbol = value; NotifyPropertyChangedEvent("Symbol");  } 
}

  

而且我不想创建10-20个私有变量来与我的属性一起工作,我想知道集合中发生了什么;。

使用automaticaly属性(即:public string Symbol { get; set; }),编译器会自动创建支持字段。但是,如果不自行管理支持字段,就无法引入逻辑(即:提升事件)。