加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 是否需要默认构造函数?

发布时间:2020-12-15 19:57:13 所属栏目:百科 来源:网络整理
导读:这两者有什么区别? class Class1{ public int a = 1;}class Class2{ public int a; public Class2() { a = 1; }} 如果没有,我可以跳过默认构造函数并像Class1一样初始化我的变量吗? 解决方法 在您的具体示例中,字段初始值设定项(Class1)很好.可以说,不公平
这两者有什么区别?

class Class1
{
    public int a = 1;
}

class Class2
{
    public int a;
    public Class2()
    {
        a = 1;
    }
}

如果没有,我可以跳过默认构造函数并像Class1一样初始化我的变量吗?

解决方法

在您的具体示例中,字段初始值设定项(Class1)很好.可以说,不公平的是公共领域; p我会建议:

// manually implemented property with field-initializer
private int a = 1;
public int A { get { return a;} set { a = value;} }

要么:

// automatically implemented property with constructor-based initialization
public int A {get;set;}
public Class1() {
    A = 1;
}

@hvd’s answer正确地说明了差异.为了说明这可以给出不同结果的具体示例,请参阅以下内容.这个例子的主要收集消息实际上是“在使用构造函数的虚方法时非常小心”.

输出第一:

Class1: 1
Class2: 0

码:

using System;
abstract class SomeBaseClass {
    protected abstract void Write();
    protected SomeBaseClass() {
        Console.Write(GetType().Name + ": ");
        Write();
    }
}
class Class1 : SomeBaseClass {
    protected override void Write() {
        Console.WriteLine(a);
    }
    public int a = 1;
}

class Class2 : SomeBaseClass {
    protected override void Write() {
        Console.WriteLine(a);
    }
    public int a;
    public Class2() {
        a = 1;
    }
}
static class Program {
    static void Main() {
        new Class1();
        new Class2();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读