如何自定义Get属性?

3

如何仅自定义 get 属性而不更改 set 属性?

public DateTime lastprocessed { get; set; }

我希望将UTC存储的日期时间以本地时间戳的形式返回。

3
在这种情况下,您无法使用自动实现属性,需恢复使用常规语法。 - Ousmane D.
1
就像 @Aominè 所说的那样。不过,你可以将 get 设为 protected,并创建一个方法(例如 GetLastProcessed()),并根据需要返回本地 date。这将帮助你避免直接访问属性值,强制你使用该方法。 - Alisson Reinaldo Silva
除了下面列出的方法,您可以添加一个新属性LastProcessedUTC并将lastprocessed设置为它。在返回值时,您需要小心了解DateTime.Kind值。一般来说,当我需要应用处理时,我倾向于避免使用自动属性。它们并不适合所有用例。 - PSGuy
2个回答

2

最接近的方法是在 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 ...
       }
}

0

我认为你最好的选择是使用 @Alisson 在评论中建议的方法(使用 protected get 来访问其值的方法)或者使用一个 private 后备字段:

    private DateTime _lastprocessed;
    public DateTime lastprocessed
    {
        get
        {
            return _lastprocessed.ToLocalTime().ToUniversalTime();
        }
        set
        {
            _lastprocessed = value;
        }
    }

当您对没有后备字段的get访问器应用格式设置并尝试创建set访问器时,您最终会遇到堆栈溢出错误,因为set将无限调用自身,试图设置属性的值。

如果您向自动属性添加初始化程序,则可以很好地设置lastprocessed的初始值,但我认为您最终会遇到麻烦,假设您打算重新分配lastprocessed的值。即使为初始化程序定义了函数,您也无法访问正在分配给lastprocessed的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接