首页 > 解决方案 > 在施工时分配给全部财产

问题描述

如果我在 C# 中有一个自动属性,我可以在类实例化时为其分配一个值,如下所示:

public DateTime DesiredBookingDate { get; set; } = DateTime.Now.Date;

但是,如果我有一个完整的属性,有一个支持字段,我不能这样做:

// This doesn't work
private DateTime _desiredBookingDate;
public DesiredBookDate 
{
    get => _desiredBookingDate;
    set => SetProperty(ref _desiredBookingDate, value);
} = DateTime.Now.Date;

有没有什么方法可以在不使用构造函数的情况下(并且以易于阅读的方式)做这样的事情?

更新:

我一直犹豫是否只将值分配给支持字段的原因是因为我无法确定是否存在任何可能影响INotifyPropertyChange. 但如果它们编译成相同的,那就没问题了。

标签: c#properties

解决方案


您可以将支持字段设置为您的值。

private DateTime _desiredBookingDate = DateTime.Now.Date;  
public DesiredBookDate 
{
    get => _desiredBookingDate;
    set => SetProperty(ref _desiredBookingDate, value);
}  

如果您需要执行任何INotifyPropertyChanged功能,可以从构造函数中调用 setter。

仅供参考,我将您的第一个 auto 属性示例放入一个简单的应用程序并使用了 IL Spy,它吐出了以下内容:

internal class Program
{
    public DateTime DesiredBookingDate
    {
        get;
        set;
    }

    [STAThread]
    private static void Main()
    {
    }

    public Program()
    {
        this.<DesiredBookingDate>k__BackingField = DateTime.Now.Date;
        base..ctor();
    }
}

推荐阅读