微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

这两者有什么区别?

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();
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐