请考虑以下代码:
public class ClassA
{
public int PropertyA { get; set; }
public int PropertyB { get; set; }
}
// Somewhere else
var obj = new ClassA
{
PropertyA = 1,
// Question:
// How do we force PropertyB to be set here without making it a parameter in the constructor?
// Ideally in compile time so that the code here would cause a compile error.
};
动机:当我尝试通过属性而不是构造函数注入依赖项时,我遇到了这个问题。
答案 0 :(得分:3)
也许您没有意识到这一点,但您可以将对象初始化器与构造函数组合在一起。
因此,你可以在构造函数中强制初始化,并仍然允许像这样的对象初始化:
public class ClassA
{
public ClassA(int propertyB)
{
PropertyB = propertyB;
}
public int PropertyA { get; set; }
public int PropertyB { get; set; }
}
因此:
var obj = new ClassA(2 /*Property B*/)
{
PropertyA = 1
};
但是,在回答您的问题时:不,您不能强制在对象初始化器中初始化属性。