分配给属性没有效果
本文关键字:有效果 属性 分配 | 更新日期: 2023-09-27 18:08:37
我有一些像这样的代码
public class SomeClass
{
public string Value {get;set;}
public string DisplayValue
{
get
{
if (fieldType == "ImageUri")
{
FileInfo file = new FileInfo(Value);
return Path.Combine(file.Directory.Name, fileName);
}
else
{
return Value;
}
}
set {}
}
}
"get"工作得很好,但我不能改变DisplayValue。当我赋一个新值时,它不会被更新。SomeClass。DisplayValue = "something new"不起作用。有人知道为什么吗?
你实际上需要定义一个setter:
public string DisplayValue
{
get
{
// some logic
return Value;
}
set
{
// some logic
Value = value;
}
}
注意,这里的value
关键字表示赋值语句右侧的结果(与标识符Value
相反,它是对您定义的另一个属性的引用)。
进一步阅读
- 属性(c#编程指南)
你的setter是空的,所以当然什么也不会发生。您的属性写入时实际上是只读的。
public string DisplayValue
{
get
{
---some logic
return Value;
}
set { Value = value; }
}
是您所需要的,您将backing字段设置为value
关键字。您可能对自动属性语法感到困惑,它向您隐藏了这一点(您用它声明了Value
)。当你手动声明一个属性时,你必须声明整个属性任何"自定义性"都丢失了
我是这样解决我的问题的:
public class SomeClass
{
private string _displayValue;
public string Value {get;set;}
public string DisplayValue
{
get
{
if (string.IsNullOrEmpty(_displayValue))
{
if (fieldType == "ImageUri")
{
FileInfo file = new FileInfo(Value);
return Path.Combine(file.Directory.Name, fileName);
}
else
{
return Value;
}
}
else
{
return _displayValue;
}
}
set {_displayValue = value;}
}
}