【问题标题】:Must I Initialize derived variables by constructor?我必须通过构造函数初始化派生变量吗?
【发布时间】:2017-01-08 15:30:29
【问题描述】:

是否可以这样初始化变量:

class A
{
public int variable;
}
class B : A
{
variable = 123;
}

而不是像这样使用构造函数? :

class A
{
   public int variable;
}

class B : A
{
   public B()
   {
   variable = 123;
   }
}

这里:Initialize class fields in constructor or at declaration?

这两种方式似乎是等价的,但是在派生类中使用第一种方式似乎是非法的。那么,是否可以通过构造函数以外的方式来初始化变量呢?

【问题讨论】:

    标签: c# inheritance


    【解决方案1】:

    你可以初始化一个类的一个字段,当你如下声明它时:

    public class Example
    {
        public int Number = 3;
    }
    

    或者您可以在如下构造函数中这样做:

    public class Example;
    {
        public int Number;
        public Example(int number)
        {
            Number = number;
        }
    }
    

    只有这两个选项。在您的情况下,您有一个基类,在其中声明一个字段。所以这个字段可以在声明时初始化,也可以通过构造函数初始化。这就是为什么它非法以下内容:

    class A
    {
        public int variable;
    }
    
    class B : A
    {
        variable = 123;
    }
    

    那么,是否有可能以其他方式初始化变量 使用构造函数?

    当然可以,但是你必须在基类中这样做:

    class A
    {
        public int variable = 123;
    }
    

    【讨论】:

    • 好的,但是我可以在派生类中更改这个变量的值吗,在我在基类中初始化它之后?
    • 当然可以。在派生类的任何方法中,您都可以使用它的名称variable 来引用这个变量并在那里设置新值。
    • 所以在构造函数等中。但我不能只在派生类定义中输入variable = something 对吗?
    • @Smorts 没错!顺便说一句,即使您只谈论一个类(没有继承、基类和派生类),也根本不允许这样做。将变量的名称作为类的成员在语法上是不正确的,它不是有效的类成员。有关班级成员的更多信息,请查看msdn.microsoft.com/en-us/library/ms173113.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多