覆盖财产

时间:2013-02-03 17:21:40

标签: c#

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

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 ....

我尝试过虚拟和覆盖以及新的(public new int test = 8;) 但它似乎不起作用

是的,我知道我应该使用私人和吸气剂。我只是想知道它是否可能?

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

3 个答案:

答案 0 :(得分: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;}
    }
}

这是a demo of this code on ideone

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:-1)

更改此

A test2 = new B();

用这个

B test2 = new B();

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