C# 如何使用{}而不是;,创建属性集本身;?
这里有一个有趣的小道消息,我在互联网上找不到。这个想法是,如果你有一个属性,比如int a{get;set;},它可以自己设置 如何使用int a{get{}set{}来设置属性集本身 片场里发生了什么 以下是我试图做的:C# 如何使用{}而不是;,创建属性集本身;?,c#,.net,stack-overflow,C#,.net,Stack Overflow,这里有一个有趣的小道消息,我在互联网上找不到。这个想法是,如果你有一个属性,比如int a{get;set;},它可以自己设置 如何使用int a{get{}set{}来设置属性集本身 片场里发生了什么 以下是我试图做的: public string Symbol { get { return Symbol; } set { Symbol = value; NotifyPropertyChangedEvent("Symbol"); } } 但它显然会造成堆栈溢出,因为它实际上是在一遍又一遍地
public string Symbol { get { return Symbol; } set { Symbol = value; NotifyPropertyChangedEvent("Symbol"); } }
但它显然会造成堆栈溢出,因为它实际上是在一遍又一遍地调用自己
我不想创建10-20个私有变量来处理我的属性,我想知道集合中发生了什么
谢谢。
set代码>只是创建了一个你看不见的私有变量。抱歉,您需要10-20个私有变量。您必须创建私有变量
不幸的是,这是您在这里遇到的特定情况下的唯一方法。如果您需要自定义逻辑,您需要自己提供支持字段:
private string symbol;
public string Symbol
{
get { return symbol; }
set { symbol = value; NotifyPropertyChangedEvent("Symbol"); }
}
我不想创建10-20个私有变量来处理我的属性,我想知道集合中发生了什么
使用AutomaticalI属性(即:公共字符串符号{get;set;}
),编译器会自动创建支持字段。但是,如果不自己管理支持字段,就无法引入逻辑(即:引发事件)。它在编译时为您生成支持字段。您无法通过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; }
我不知道如何避免这种冗长,但是Microsoft应该创建一个属性特定的关键字来访问这个“不可见变量”,有点像value关键字。@Rob如果您想访问backing字段,我建议在编辑器中使用“propfull”段而不是“prop”段。简写“{get;set;}”的主要好处是,如果需要,您可以在以后轻松地回来添加支持字段和完整方法,而无需重新编译依赖代码。然后,Microsoft应该创建一个特定于属性的关键字来访问此“不可见变量”,有点像value关键字。@Rob您可以自由地到Microsoft提出建议。然而,这并不是建议新C#特性的地方。