子类试图为超类中的变量赋予新值

时间:2014-07-06 17:41:57

标签: c#

public class superclass
    {
        public string example;
        public class subclass: superclass
        {
            public class subsubclass: subclass
            {

                public string example = "blahblah";
            }
        }
    }

我正在尝试这样做,但我一直都会遇到错误:

  

superclass.example是一个字段,但用作类型

1 个答案:

答案 0 :(得分:2)

如果您尝试在类层次结构中定义示例字段两次,请执行以下操作:

public class superclass
{
    public string example;
    public class subclass: superclass
    {
        public class subsubclass: subclass
        {

            public new string example = "blahblah";
        }
    }
}

但你可能想做的是:

public class superclass
{
    public string example;
    public class subclass: superclass
    {
        public class subsubclass: subclass
        {
            public subsubclass()
            {
                 example = "blahblah";
            }
        }
    }
}

第一个示例将在子类上创建一个具有相同类型和名称的新的相同字段。我无法想象一个有意义的场景。这只会导致混乱。想象一下这样做:

var myObj = new subsubClass();
myObj.example = "something";
DoSomething(myObj);

DoSomething的位置如下:

void DoSomething(superclass myObj)
{
    var tmp = myObj.example;
}

上面的代码会导致tmp为null,而不是某些人所期望的“某事”。避免使用new运算符,除非你有充分的理由这样做(如果你自己编写所有类,几乎从不)

TL; DR:如果您只想让您的子类设置属性,请在构造函数中执行。