如何仅自定义 get 属性而不更改 set 属性?
public DateTime lastprocessed { get; set; }
我希望将UTC存储的日期时间以本地时间戳的形式返回。
如何仅自定义 get 属性而不更改 set 属性?
public DateTime lastprocessed { get; set; }
最接近的方法是在 C#
6 及更高版本中,您可以像初始化字段一样初始化自动实现属性:
public DateTime FirstName { get; set; } = // your value here;
如果你想在赋值之前执行一些逻辑,那么你可以创建一个方法来执行逻辑并将结果赋值,如下所示:
public DateTime FirstName { get; set; } = doLogic();
get;
set;
。public DateTime lastprocessed
{
get
{
// some logic ...
return // some value;
}
set
{
// some logic ...
}
}
我认为你最好的选择是使用 @Alisson 在评论中建议的方法(使用 protected get
来访问其值的方法)或者使用一个 private
后备字段:
private DateTime _lastprocessed;
public DateTime lastprocessed
{
get
{
return _lastprocessed.ToLocalTime().ToUniversalTime();
}
set
{
_lastprocessed = value;
}
}
当您对没有后备字段的get
访问器应用格式设置并尝试创建set
访问器时,您最终会遇到堆栈溢出错误,因为set
将无限调用自身,试图设置属性的值。
如果您向自动属性添加初始化程序,则可以很好地设置lastprocessed
的初始值,但我认为您最终会遇到麻烦,假设您打算重新分配lastprocessed
的值。即使为初始化程序定义了函数,您也无法访问正在分配给lastprocessed
的值。
get
设为 protected,并创建一个方法(例如GetLastProcessed()
),并根据需要返回本地 date。这将帮助你避免直接访问属性值,强制你使用该方法。 - Alisson Reinaldo SilvaLastProcessedUTC
并将lastprocessed
设置为它。在返回值时,您需要小心了解DateTime.Kind
值。一般来说,当我需要应用处理时,我倾向于避免使用自动属性。它们并不适合所有用例。 - PSGuy