在静态函数中调用重载基类的函数?

时间:2011-08-19 11:53:11

标签: c# inheritance static

public class A 
{
    public int F () 
    { 
    // do something
    }
}

public class B : A
{    
    public static B F ()
    {
        B b = new B ();
        // do something more with b
        b.base.F (); // this doesn't work
        b.A.F (); // this doesn't work either
        return b;
    }
}

调用A.F()的正确语法是什么?请注意B.F()是一个静态函数。

关于“更改名称评论”的编辑:

请不要错误地从这个简单的例子中得出结论。实际上,这些函数用于读取XML,并且函数签名在所有受影响的类中都是ReadXML (XmlNode parent, int id)

2 个答案:

答案 0 :(得分:3)

以下方法将起作用(现在经过测试,这是一个正确的答案)来调用A类的F方法。

    public static B F()
    {
        B b = new B();
        // do something more with b
        ((A)b).F(); // this works
        return b;
    }

您可能想考虑更改名称。我发现很难相信描述性的方法名称对于返回int的东西和返回类B的东西是相同的。也许后者应该在那里有一个Create,因为它似乎是某种工厂方法?

答案 1 :(得分:0)

我认为在静态方法中使用任何需要使用实例/继承的关键字是不可能的,例如basethis。在班级F()中调用B时,没有班级B的实例,因此您无法引用任何base

作为一个选项,您可以在A中创建课程B.F()的对象,并像F()一样调用A课程的a.F(),或者您需要{在F()中{1}} AstaticA.F()。{/ p>