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)时,默认承包商会发生什么情况
  • Is
    foo obj1=默认值(foo)等于
    foo obj1=null
  • 提前感谢。

    根据,默认值将变量设置为其默认值。这意味着可为null的类型将设置为null,数值类型将设置为0。

    以下是工作原理:

    返回的
    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当前位置快速测试似乎可以证明你对我错,谢谢你今天教我新东西!