当创建类的实例时,使用默认值初始化类属性的方法是什么?
本文关键字:属性 初始化 方法 是什么 默认值 实例 创建 | 更新日期: 2023-09-27 18:07:11
我有以下简单的类:
public class SimpleClass{
public int SimpleProperty {get; set;}
public SimpleClass(){
}
}
当我创建SimpleClass的实例时,我需要初始化属性SimpleProperty的默认值。这到底是怎么回事?
在构造函数中创建参数,并在创建简单类的实例时传递默认值:
public class SimpleClass{ public int SimpleProperty {get; set;} public SimpleClass(int simpleProperty){ SimpleProperty = simpleProperty; } }
或在默认构造函数中初始化属性:
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