Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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# 如何从父类调用方法';s基类_C#_.net_Inheritance - Fatal编程技术网

C# 如何从父类调用方法';s基类

C# 如何从父类调用方法';s基类,c#,.net,inheritance,C#,.net,Inheritance,我可以从祖父母类调用方法吗?如果可以,如何调用 我正在尝试这样做: A类{ void foo(){ //做点什么。。。 } } B类:A{ 重写void foo(){ //做点别的。。。 } } 丙类:乙类{ 重写void foo(){ //调用A的foo方法 //那就做点别的吧 } } 一种方法是在A类中使用显式接口实现: 这允许您调用A的实现,既可以从C内部的代码调用,也可以从C外部调用(首先通过强制转换到IBob) 难道你不能将A的foo方法重命名为其他方法,然后类C将从B继承它,从A继承

我可以从祖父母类调用方法吗?如果可以,如何调用

我正在尝试这样做:

A类{
void foo(){
//做点什么。。。
}
}
B类:A{
重写void foo(){
//做点别的。。。
}
}
丙类:乙类{
重写void foo(){
//调用A的foo方法
//那就做点别的吧
}
}

一种方法是在
A类中使用显式接口实现:

这允许您调用
A
的实现,既可以从
C
内部的代码调用,也可以从
C
外部调用(首先通过强制转换到
IBob


难道你不能将A的foo方法重命名为其他方法,然后类C将从B继承它,从A继承它吗?不,我正在从类型A的变量调用相同的方法。应该
A
virtual void foo()
,还是
B
new void foo()
?可能的重复
using System;

namespace ConsoleApp4
{
    interface IBob
    {
        void foo();
    }

    class A : IBob
    {
        void IBob.foo()
        {
            Console.WriteLine("A");
        }

        public virtual void foo()
        {
            ((IBob)this).foo();
        }
    }

    class B : A
    {
        public override void foo()
        {
            Console.WriteLine("B");
        }
    }

    class C : B
    {
        public override void foo()
        {
            Console.WriteLine("C");

            // Writes B
            base.foo();

            // Writes A
            ((IBob)this).foo();
        }
    }
    public class Program
    {
        static void Main(string[] args)
        {
            var sally = new C();
            sally.foo(); // A B C

            IBob sally2 = sally;
            sally2.foo(); // A

            Console.ReadLine();
        }
    }
}