Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用重载基类';静态函数中的函数?_C#_Inheritance_Static - Fatal编程技术网

C# 调用重载基类';静态函数中的函数?

C# 调用重载基类';静态函数中的函数?,c#,inheritance,static,C#,Inheritance,Static,调用A.F()的正确语法是什么?请注意B.F()是一个静态函数 关于“更改名称注释”的编辑: 请不要错误地从这个简单的例子得出结论。实际上,函数是用来读取XML的,函数签名在所有受影响的类中都是ReadXML(XmlNode parent,int id)。我认为在静态方法中不可能使用任何需要处理实例/继承的关键字,比如base或this。在类B中调用F()时,没有类B的实例,因此不能引用任何base 作为一个选项,您可以在B.F()中创建类A的对象,并调用类A的F(),比如A.F(),或者您需要

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

关于“更改名称注释”的编辑:


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

我认为在静态方法中不可能使用任何需要处理实例/继承的关键字,比如
base
this
。在类
B
中调用
F()
时,没有类
B
的实例,因此不能引用任何
base

作为一个选项,您可以在
B.F()
中创建类
A
的对象,并调用类
A
F()
,比如
A.F()
,或者您需要将
A
中的
F()
设置为
静态
并从
B.F()

调用
A.F()
(现在测试,所以答案正确)调用类的F方法

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;
    }
}

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

您尝试过
((a)B).F()
?尽管我的首选解决方案是重命名其中一个Fs.:)这难道不能被认为是重载功能的错误使用吗?您不能通过这种方式调用,您应该尝试在类a中创建一个构造函数,并在该构造函数中调用方法F(),这不会为您提供编译器隐藏方法的警告吗?jv42:确实如此。但是,如果您没有设置为将警告视为错误,它仍然允许您构建警告
将不同意您关于没有类B实例的陈述。此外,您的选项将完全更改有问题的代码。在B.F()中创建类A的对象无助于对所创建的B类执行操作。在静态中生成F()将阻止它处理我认为“do something”正在处理的实例。@Chris似乎你搞错了。。。你们可以创建类的实例,但你们不能使用任何关键字来处理像base这样的实例……哦,我明白你们的意思了。。。我想解释一下为什么他所做的不起作用是有用的,但我仍然不认为这能特别回答这个问题。。。。在不知道实际应用的情况下。这个例子已经被尽可能地删减了。@karx11erx:是的,这就是为什么我说你应该考虑它,而不是你绝对应该考虑的原因。我以为它被砍掉了,可能会有比我们看到的更多的东西。否则我会一直抱怨你糟糕的变量和类名我只是在回答安东尼。谢谢你的回答,这就是我要找的。我自己也能想象出来,但我一直在思考C++…
    public static B F()
    {
        B b = new B();
        // do something more with b
        ((A)b).F(); // this works
        return b;
    }