繁体   English   中英

为属性设置默认值

[英]Set a default value to a property

是否可以在没有属性主体的情况下设置默认值? 最好有注释。

[SetTheDefaultValueTo(true)]
public bool IsTrue { get; set; }

[SetTheDefaultValueTo(false)]
public bool IsFalse { get; set; }

public void Something()
{
    var isTrue = this.IsTrue;
    var isFalse = this.IsFalse;
}

不,没有使用元数据设置属性值的内置方法。 您可以使用某种工厂来构建具有反射的类的实例,然后可以设置默认值。 但简而言之,您需要使用构造函数(或字段设置器,它们被提升到构造函数)来设置默认值。

如果您的构造函数有多个重载,您可能需要查看构造函数链接

使用 C# 6+,你可以做这样的事情......

public string MyValue { get; set; } = "My Default";

哦,它变得更有趣了,因为人们甚至要求这样的东西......

// this code won't compile!
public string MyValue {
    private string _myValue;
    get { return _myValue ?? "My Default"; }
    set { _myValue = value; }
}

...优点是您可以控制字段的范围,使其只能在属性代码中访问,因此您不必担心类中的任何其他内容在不使用 getter/setter 的情况下使用状态。

在类构造函数中分配默认属性值。

class MyClass
{
    public MyClass()
    {
        IsTrue = true;
        IsFalse = false;
    }

    public bool IsTrue { get; set; }

    public bool IsFalse { get; set; }

    [...]

    public void Something()
    {
        var isTrue = this.IsTrue;
        var isFalse = this.IsFalse;
    }
}

如果您使用的是 C#5 及更早版本,则必须在构造函数中执行此操作。

但是从 C# 6.0 开始,包含了具有自动属性初始值设定项的能力,语法是:

public int myage { get; set; } = 33;

旧线程。 看起来微软听说过这个功能在 .Net Framework 4.6+ (C# 6+) 中可用你可以像这样使用它

public string MyValue { get; set; } = "My Default";

在这个非常具体的例子中,你可以:

public bool IsFalse { get; set; }
public bool IsTrue
{
    get { return !IsFalse; }
    set { IsFalse = !value; }
}

public void Something()
{
    var isTrue = this.IsTrue;
    var isFalse = this.IsFalse;
}

但是,一般来说,没有。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM