C# 如何定制Get属性?
如何仅自定义get属性而不更改set属性C# 如何定制Get属性?,c#,C#,如何仅自定义get属性而不更改set属性 public DateTime lastprocessed { get; set; } 我想将本地时间戳中的日期时间返回为UTC中存储的日期时间。最接近的方法是在C#6及更高版本中,您可以初始化自动实现的属性,类似于字段: public DateTime FirstName { get; set; } = // your value here; 如果您希望在赋值之前执行一些逻辑,那么您可以创建一个方法来执行逻辑并按如下方式赋值结果: public D
public DateTime lastprocessed { get; set; }
我想将本地时间戳中的日期时间返回为UTC中存储的日期时间。最接近的方法是在
C#
6及更高版本中,您可以初始化自动实现的属性,类似于字段:
public DateTime FirstName { get; set; } = // your value here;
如果您希望在赋值之前执行一些逻辑,那么您可以创建一个方法来执行逻辑并按如下方式赋值结果:
public DateTime FirstName { get; set; } = doLogic();
最后一个选项是经典的get代码>设置代码>
public DateTime lastprocessed
{
get
{
// some logic ...
return // some value;
}
set
{
// some logic ...
}
}
我认为你最好的选择是使用@Alisson在评论中建议的(protectedget
方法访问其值)或private
支持者:
private DateTime _lastprocessed;
public DateTime lastprocessed
{
get
{
return _lastprocessed.ToLocalTime().ToUniversalTime();
}
set
{
_lastprocessed = value;
}
}
如果在没有备份字段的情况下对get
访问器应用格式,并尝试创建set
访问器,则会出现堆栈溢出错误,因为set
将无休止地调用自身,试图设置属性的值
如果在auto属性中添加初始值设定项,这对于设置lastprocessed
的初始值很好,但我认为如果您打算重新指定lastprocessed
的值,您最终会遇到麻烦。即使为初始值设定项定义函数,也无法访问分配给lastprocessed
的值。在这种情况下,您不能使用自动实现的属性。回到正常语法,就像@Aominè说的。但是,您可以做的是使得到保护,并创建一个方法(例如GetLastProcessed()
)并根据需要返回本地日期。这将帮助您避免直接访问属性值,从而强制您使用该方法。除了下面列出的方法外,您只需添加一个新属性,LastProcessedUTC
,并使LastProcessedUTC
。在返回值时,您需要小心知道DateTime.Kind
值。通常,当我开始需要应用处理时,我倾向于避免自动属性。它们并不适合所有的用例。