1

我正在尝试覆盖程序中的属性。这基本上是我想要做的:

class A { public int test = 7; }

class B : A { public int test = 8; }


class Program
{
    static void Main(string[] args)
    {
        A test1 = new A();
        A test2 = new B();

       Console.WriteLine(test1.test);
       Console.WriteLine(test2.test);

    }
}

当我希望它在第二种情况下显示 8 时,这两种情况下都显示 7....

我已经尝试过 virtual 和 override 以及 new (public new int test = 8;) 但它似乎不起作用

是的,我知道我应该使用 private 和 getter。我只是想知道这是否可能?

编辑:我不是本地 C# 程序员,如果我混淆了这些术语(例如字段和属性),请原谅我!

4

3 回答 3

3

我正在尝试覆盖程序中的属性。

class A { public int test = 7; }

问题是它int test不是一个属性,它是一个公共字段。字段不能被覆盖。

这是一个覆盖属性的示例:

class A {
    public virtual int test {
        get {return 7;}
    }
}

class B : A {
    public override int test {
        get {return 8;}
    }
}

这是ideone 上此代码的演示

于 2013-02-03T17:24:31.480 回答
1

test是一个字段,而不是一个属性。您必须将其更改为属性并添加virtual修饰符以允许在子类中覆盖它。然后,您必须使用override关键字覆盖类中返回的值B

class A
{
    public virtual int test
    {
        get { return 7; }
    }
}

class B : A 
{
    public override int test
    {
        get { return 8; }
    }
}
于 2013-02-03T17:26:37.157 回答
-1

改变这个

A test2 = new B();

有了这个

B test2 = new B();

如果将 test2 创建为 A,则调用 A 方法

于 2013-02-03T17:25:46.207 回答