2014-11-21 95 views
-1
class A 
{ 
    public Start(){} 
} 

class B:A 
{ 
    public Start(){} 
} 

class C:B 
{ 
public Start() 
{ 
    //i want to call B's Start() 
    // when i do base.Start(); 
    //it calls A's Start(); 
} 
} 

如何从C的Start()中调用B的Start();当我从C的Start()调用base.Start()时,它调用A的Start();如何在多级继承中调用父级的方法

+0

使用虚拟/超驰;因为它现在是隐藏的,而不是继承 – Lanorkin 2014-11-21 09:26:53

+2

否 - 它调用'B.Start'。 – 2014-11-21 09:28:32

+0

如果你在'B的Start()'方法中没有'base.Start()',那么Konrad提到它会调用'B的Start()'而不是'A的Start()'方法。 – Michael 2014-11-21 09:37:28

回答

0

请确定你有什么问题。根据7.6.8,你的方法不是虚拟的。 C#语言规范:

在结合时,形式base.Ibase[E]的基本访问表达式进行求值就好像它们被写入((B)this).I((B)this)[E],其中B是基类的类或结构,其中构造发生。因此,base.Ibase[E]对应于this.Ithis[E],除了这被视为基类的一个实例。

所以那些实际上:

class C:B 
{ 
    public Start() 
    {   
     ((B)this).Start(); // same as base.Start(); 
    } 
} 
+0

为什么这里的地狱用户没有特定的理由就会给出负面评价? – sanmeet 2014-11-21 11:45:33

+0

@sanmeet,在我看来他们不应该......但它有时只是发生.. – 2014-11-21 11:48:03

+0

这是令人沮丧。 :( – sanmeet 2014-11-22 05:15:30