尝试执行以下操作时,出现“只有自动实现的属性可以在 C# 中具有初始值设定项”错误:
public int Precision
{
get { return Precision; }
set
{
if (value < 0)
Precision = 0;
else if (value > 15)
Precision = 15;
else
Precision = value;
}
} = 12;
Run Code Online (Sandbox Code Playgroud)
为什么这是不允许的?
很确定这不是您使用getand 的方式set。此外,您的 get 会受到自我参考的影响。我认为这就是你想要的:
private int _precision = 12;
public int Precision {
get => _precision;
set {
if (value < 0)
_precision = 0;
else if (value > 15)
_precision = 15;
else
_precision = value;
}
}
Run Code Online (Sandbox Code Playgroud)
嗯,自动属性只是获取和设置自动创建的支持字段的属性的语法糖。所以下面的两个代码段是相似的:
\npublic int Precision { get; set; }\nRun Code Online (Sandbox Code Playgroud)\n和
\npublic int Precision\n{\n get { return <Precision>k__BackingField; } \n set { <Precision>k__BackingField = value; }\n}\nRun Code Online (Sandbox Code Playgroud)\n然而,当您在属性中创建一些自己的逻辑时,就没有自动支持字段之类的东西了。事实上,您甚至可以在没有任何背景字段的情况下执行以下操作:
\nset { Console.WriteLine(); }\nRun Code Online (Sandbox Code Playgroud)\n然而,初始值被解析为以下构造函数:
\nMyClass()\n{ \n this.<Precision>k__BackingField = myValue; \n}\nRun Code Online (Sandbox Code Playgroud)\n但是,当没有这样的后备字段时,编译器应该在这里做什么?
\n| 归档时间: |
|
| 查看次数: |
2389 次 |
| 最近记录: |