Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有在构造函数中设置默认值的良好实践?_C#_Constructor_Properties - Fatal编程技术网

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的答案,他介绍了这个决定可能取决于什么。我没有给出答案,所以我添加了一个注释。考虑一下异常处理。这几天不会有太大的不同,但如果在属性而不是构造函数中发生异常,可能会使代码更明显,特别是如果构造器正在做很多事情,那将是我的首选。