我想知道是否有一种方法可以在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;
}
我不知道上面的想法是否很好,但我认为它可以提高我的案例的可读性。
有没有办法实现这个目标?
答案 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;
,则实际上是重新分配了整个对象,其他属性将被重新设置为其默认值。