有没有一种方法可以指定类的默认属性?

时间:2020-08-14 01:10:46

标签: c# properties

我想知道是否有一种方法可以在C#中指定类的默认属性。

例如,如果我有以下课程:

class NewType
{
    public object Value 
    {
        get => _value;
        set
        {
            IsInitialized = true;
            _value = value;
        }
    }
    public bool IsInitialized { get; private set; }

    // ... etc properties
}

我想按如下方式使用上述类:

void Test()
{
    NewType Value = new NewType();

    // The follow assignment expression means 'Value.Value = 10;'
    Value = 10;
}

我不知道上面的想法是否很好,但我认为它可以提高我的案例的可读性。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:3)

在回答有关“默认属性”的问题时,答案是否定的。最好的办法是指定要为其分配值的属性:

get()

下一个最好的事情是创建一个设置值的构造函数:

var newType = new NewType {Value = 10};

现在输入的内容略少:

class NewType
{
    private int _value;
    public int Value
    {
        get { return _value; }
        set
        {
            IsInitialized = true;
            _value = value;
        }
    }

    public bool IsInitialized { get; private set; }

    public NewType(int value) 
    {
        Value = value;
    }

    // ... etc properties
}

如果您希望能够基于整数初始化类而无需调用构造函数,则可以为var newType = new NewType(10); 实现一个隐式运算符,并根据分配的值创建类的新实例:

int

现在您可以这样做:

class NewType
{
    private int _value;
    public int Value
    {
        get { return _value; }
        set
        {
            IsInitialized = true;
            _value = value;
        }
    }

    public bool IsInitialized { get; private set; }

    public static implicit operator NewType(int i) => new NewType {Value = i};

    // ... etc properties
}

这里的问题是,如果您已经有一个设置了其他属性的类,然后使用隐式运算符尝试设置NewType newType = 10; ,则实际上是重新分配了整个对象,其他属性将被重新设置为其默认值。