当创建类的实例时,使用默认值初始化类属性的方法是什么?

本文关键字:属性 初始化 方法 是什么 默认值 实例 创建 | 更新日期: 2023-09-27 18:07:11

我有以下简单的类:

public class SimpleClass{
    public int SimpleProperty {get; set;}
    public SimpleClass(){
    }
}

当我创建SimpleClass的实例时,我需要初始化属性SimpleProperty的默认值。这到底是怎么回事?

  1. 在构造函数中创建参数,并在创建简单类的实例时传递默认值:

    public class SimpleClass{
        public int SimpleProperty {get; set;}
        public SimpleClass(int simpleProperty){
            SimpleProperty = simpleProperty;
        }
    }
    
  2. 或在默认构造函数中初始化属性:

    public class SimpleClass{
        public int SimpleProperty {get; set;}
        public SimpleClass(){
            SimpleProperty = 0; //the example of default value
        }
    }
    

当创建类的实例时,使用默认值初始化类属性的方法是什么?

嗯,这很大程度上取决于你在做什么项目。

如果它是一个大的企业项目,你的属性是一些对象类型(这使你的类依赖于一些其他对象),第一个选项将更可取,因为它允许使用IoC容器和框架,它也简化了如何编写单元测试的方式,因为它很简单,传递一个模拟值在tor内部,而不是那么简单,如果tor不接受参数。

对于简单的类型,如int或简单的宠物项目,但是这并不重要,由您决定。不要忘记,您可以为

使用可选的参数。
public SimpleClass(int simpleProperty = 15)
{
    SimpleProperty = simpleProperty;
}

这是两种不同的方法。如果你有一个默认值,你通常可以忽略设置这个属性的值。因此,您应该在构造函数中初始化默认值。

var a new SimpleClass();

现在a具有您在构造函数中提供的默认值。

具有期望为参数的签名,另一方面强制用户提供值。这意味着根本没有默认值,您不能省略该值。

var a = SimpleClass();  // this won´t compile
顺便说一下,您忘记了第三种方法:可选参数:
SimpleClass(int value = -1)
{
    SimpleProperty = value;
}

现在你可以使用它作为我的第一个方法

var a = new SomeSimpleClass()

var a = new SimpleClass(1)

从c# 6开始,事情变得简单了一些,因为你可以给你的属性一个默认值:

int SimpleProperty { get; set; } = -1;

无论如何,如果你的默认值是零,你可以完全省略它,因为零是int的默认值

也考虑使类不可变:

public class SimpleClass
{
    // getter only, no setter
    public int SimpleProperty { get; }
    public SimpleClass(int simpleProperty)
    {
        // allowed in C#6+
        SimpleProperty = simpleProperty;
    }
}

如果你的属性是可写的(即类是可变的),没有构造函数重载会真正阻止你搬起石头砸自己的脚。

可以有多个构造函数。所以你可以同时使用。

所以,如果用户没有提供一个值,那么默认设置为0