C# 关键字“之间的差异”;新";及;“违约”;在类的创建实例中
我的课程是:C# 关键字“之间的差异”;新";及;“违约”;在类的创建实例中,c#,constructor,C#,Constructor,我的课程是: class foo { public foo(string Text) { } } 为类的创建实例运行此代码后,obj1设置为null: foo obj1 = default(foo); 通过吹代码,一切正常: foo obj2= new foo("bla bla"); 我有两个问题: 当运行default(foo)时,默认承包商会发生什么情况 Isfoo obj1=默认值(foo)等于foo obj1=nul
class foo
{
public foo(string Text)
{
}
}
为类的创建实例运行此代码后,obj1
设置为null
:
foo obj1 = default(foo);
通过吹代码,一切正常:
foo obj2= new foo("bla bla");
我有两个问题:
default(foo)时,默认承包商会发生什么情况代码>
foo obj1=默认值(foo)代码>等于foo obj1=null
null
for
数值类型的参考类型和zero
。对于structs
,它将
返回初始化为zero
或null
的struct的每个成员,具体取决于
取决于它们是值类型还是引用类型。对于可为空的值
类型,默认值返回一个System.Nullable
,初始化如下
任何struct
运算符只是创建类的新实例,并在构造函数中编写时初始化属性/字段
用于创建对象和调用构造函数
它不调用构造函数,只是使用默认值初始化。
请记住,它还与int、double和structs等值类型相关。
另一个用例是默认的泛型类型。
每个类型都有一个预先确定的默认值,该值在处指定。本质上,默认值(T)只保留保存对该类型的引用或实例所需的最小内存,它不调用任何构造函数
- 对于
int
和bool
等基本类型,返回的值分别为0
或false
- 对于引用类型(类),所做的唯一保留是引用,它将为null
- 对于结构,结构的内存将根据上述规则保留,因此引用字段将被初始化为
null
,即使它们由于构造函数而不能正常为null
!值字段将有其默认设置(0
,false
等)
- 对于枚举类型,值将初始化为其第一个(0值)字段,除非您已手动为枚举标签指定了值,在这种情况下,值仍将为0,并且可能无效
默认值
不创建实例。它将一个变量初始化为默认值foo
(对于类,该值为null,对于int
为零,等等)。@J.Steen我可以定义一个类的默认值吗?@combo\u ci:No,规则是由.NET预定义的。类的默认值为null
,对于数字类型和结构,所有成员初始化为零或null
(取决于成员的类型,如果它是引用类型或不是引用类型)。规则记录在中。“对于枚举类型,值将初始化为其第一(0)个字段。”-不完全正确-将为零;这可能是也可能不是第一个(第0个)字段的值(例如,我可能有enum Foo{A=42,B=12}
)——甚至可能没有值为的枚举项zero@MarcGravell当前位置快速测试似乎可以证明你对我错,谢谢你今天教我新东西!