C#继承,使用基本函数访问子成员?

时间:2009-08-29 00:59:23

标签: c# .net inheritance polymorphism

我有一个继承自另一个的类,我想使用其中一个基类函数...但我遇到的问题是调用基函数不会从继承的类返回成员变量我曾希望。

为了说明我的问题,我创建了一个简化的例子。我希望这个例子输出“5”,但它没有:)解决方案似乎是我需要将myclass1的getInt()函数复制到myclass2中...然后它会工作,但这似乎打败了从myclass1继承的观点(我想避免在每个类中重复该函数)。

class Program
{
    static void Main(string[] args)
    {
        myclass2 myclass = new myclass2();

        // Expected to output 5, but it actually outputs 0
        Console.WriteLine( myclass.getInt() );
    }
}

struct s1
{
    public string str;
    public int num;
}

struct s2
{
    public int num;
    public int num2;
}

class myclass1
{
    internal s1 mystruct;

    internal int getInt()
    {
        return mystruct.num;
    }
}

class myclass2 : myclass1
{
    internal new s2 mystruct;

    internal myclass2()
    {
        mystruct.num = 5;
    }
}

1 个答案:

答案 0 :(得分:5)

您正在隐藏myclass1.mystruct myclass2.mystruct。它们是两个完全不同的对象。

您可以通过在基类中创建virtual并在子类中创建override来覆盖该对象,但该对象必须保持其类型。您无法更改实例的类型,因为这不是类型安全的。 (FIXME)如果您想更改mystruct的类型,为什么?

如果您只想从myclass1.mystruct访问myclass2,我认为您可以使用base.mystruct