如何自定义Get属性?

时间:2017-07-16 00:05:48

标签: c#

如何在不更改set属性的情况下自定义get属性?

public DateTime lastprocessed { get; set; }

我希望以本地时间戳返回日期时间,因为它存储在UTC中。

2 个答案:

答案 0 :(得分: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 ...
       }
}

答案 1 :(得分:0)

我认为您最好的选择是使用@Alisson在评论中建议的protected get以及访问其值的方法)或private支持者:

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

在没有支持字段的情况下将格式应用于get访问者并尝试创建set访问者时,最终会出现 Stack Overflow 错误,因为{{ 1}}将无休止地调用自己,试图设置属性的值。

如果你为auto属性添加一个初始值设定项,这对于设置set的初始值很好,但我认为你最终会遇到麻烦,假设你打算重新分配{{{ 1}}。即使您为初始化程序定义了一项功能,也无法访问分配给lastprocessed的值。