C# 如何定制Get属性?

C# 如何定制Get属性?,c#,C#,如何仅自定义get属性而不更改set属性 public DateTime lastprocessed { get; set; } 我想将本地时间戳中的日期时间返回为UTC中存储的日期时间。最接近的方法是在C#6及更高版本中,您可以初始化自动实现的属性,类似于字段: public DateTime FirstName { get; set; } = // your value here; 如果您希望在赋值之前执行一些逻辑,那么您可以创建一个方法来执行逻辑并按如下方式赋值结果: public D

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

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
值。通常,当我开始需要应用处理时,我倾向于避免自动属性。它们并不适合所有的用例。