3

这是一个有趣的花絮,我在互联网上找不到。这个想法是,如果你有一个属性,比如 int a { get; 放; } 它可以设置自己。

如何使用 int a { get { } set { } } 设置属性?

集合内部发生了什么;?

这是我试图做的:

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

但它显然会造成堆栈溢出,因为它本质上是一遍又一遍地调用自己。

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

谢谢你。

4

4 回答 4

10

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

于 2012-08-20T20:19:56.533 回答
2

您必须创建私有变量。

不幸的是,这是您在此处遇到的特定情况下的唯一方法。

于 2012-08-20T20:20:12.287 回答
1

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

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

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

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

于 2012-08-20T20:21:12.717 回答
1

它在编译时为您生成一个支持字段。您无法通过智能感知访问它,因为它尚未创建。它等效于以下尚未生成“_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; }
于 2012-08-20T20:21:50.413 回答