C# 是否有在构造函数中设置默认值的良好实践?
考虑一个简单的类C# 是否有在构造函数中设置默认值的良好实践?,c#,constructor,properties,C#,Constructor,Properties,考虑一个简单的类 public class MyClass { private int myProperty ... public int MyProperty { get { return myProperty; } set { // some evaluation/condition myProperty=
public class MyClass
{
private int myProperty
...
public int MyProperty
{
get
{
return myProperty;
}
set
{
// some evaluation/condition
myProperty= value;
}
}
...
}
现在,如果我想创建一个空构造函数,在其中为类属性设置默认值,我可以这样做:
public MyClass()
{
myProperty = 1;
...
}
public MyClass()
{
MyProperty = 1;
...
}
或者这样:
public MyClass()
{
myProperty = 1;
...
}
public MyClass()
{
MyProperty = 1;
...
}
这两个例子似乎都是有效的,因为我永远不会设置默认值,这不符合setter评估中的要求。
问题是,是否有一个最佳实践,或者说这无关紧要?
一个或另一个的优点是什么(因为我找不到)?这个问题是在哪里提出的,有什么参考资料吗
到目前为止,我遇到了许多不同开发人员的代码,它们使用其中一种或两种方式…我个人喜欢将其设置为您在第一块中所做的那样。 对我来说,它作为方法的另一个事实是构造对象,而不是使用alredy构造。此外,它还确保不调用属性(它们转换为set/get函数,这会导致两条多余的指令)
但我相信这两种变体都是有效的,也许编译器会优化属性以直接赋值。您可以同时使用这两种变体。但是我更喜欢第一个。为什么?因为属性使用的值是直接指定的。对于上面的C#6,您可以直接在属性中使用默认值,而无需使用构造函数
public class Person
{
public string FirstName { get; set; } = "<first_name>";
public string LastName { get; set; } = "<last_name">;
}
公共类人物
{
公共字符串FirstName{get;set;}=”“;
公共字符串LastName{get;set;}=“对于简单数据,第一个方法是可以的。但是对于更复杂的数据,可以在集合中设置一个条件(取决于另一个变量,例如,set{if(Config.TestEnv)…)因此,如果你直接设定私人价值,你可能会遇到麻烦。由于这个问题是基于意见的,所以有人投票结束这个问题。目前的答案也是基于意见的。然而,这个问题更多的是关于它是否仅仅取决于一个人的意见,或者是否有一个“官方”答案。正如你在答案中看到的,没有“正确”答案在这里,每个人都有自己的偏好,这就是为什么我们把这个问题选为“基于意见的”。最好的答案是LeBigCat的答案,他介绍了这个决定可能取决于什么。我没有给出答案,所以我添加了一个注释。考虑一下异常处理。这几天不会有太大的不同,但如果在属性而不是构造函数中发生异常,可能会使代码更明显,特别是如果构造器正在做很多事情,那将是我的首选。