Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用{}而不是;,创建属性集本身;?_C#_.net_Stack Overflow - Fatal编程技术网

C# 如何使用{}而不是;,创建属性集本身;?

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"); } } 但它显然会造成堆栈溢出,因为它实际上是在一遍又一遍地

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

如何使用int a{get{}set{}来设置属性集本身

片场里发生了什么

以下是我试图做的:

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#特性的地方。