2013-10-08 129 views
2

我有鹼和如下面派生類:C#繼承防止基類的方法調用派生類的方法

//base class 
public class BST 
{ 
    public virtual void Find(); 
    public virtual void Insert() 
    { 
     Find(); 
    } 
} 


// derived class 
public class splayTree:BST 
{ 
    public override void Find() 
    { 
     base.Find(); 
     ... 
    } 
    public override void Insert() 
    { 
     base.Insert(); 
     ..... 
    } 
} 

後我創建了一個伸展樹對象伸展樹,

  • 我打電話splayTree.Insert();
  • Insert()調用base.Insert()
  • base.Insert()調用Find()的派生類。

我該如何讓base.Insert()調用基類的Find()? 謝謝。

回答

4

基類定義了Find as Virtual,它表示子類可以覆蓋它,如果是,基類將使用該覆蓋。

如果你想調用你的子類中的基礎查找,只是不要實現查找。

如果你想在你的子類來定義一個名爲Find方法,不是虛擬連接到base.Find,使用new關鍵字代替override關鍵字。

0

通過不重寫查找方法:

//base class 
public class BST 
{ 
    public virtual void Find(); 
    public virtual void Insert() 
    { 
     Find(); 
    } 
} 


// derived class 
public class splayTree:BST 
{ 
    public void Find() 
    { 
     base.Find(); 
     ... 
    } 
    public override void Insert() 
    { 
     base.Insert(); 
     ..... 
    } 
} 
0

如果你想調用基類的find()方法,但仍保留其查找的靈活性()與衍生實現虛擬方法,打破將base.Find()方法的邏輯轉換爲私有方法,您可以從基類明確調用:

//base class 
public class BST 
{ 
    private void _Find() 
    { 
     // base.Find() implementation here 
    } 

    public virtual void Find() 
    { 
     _Find(); 
    } 

    public virtual void Insert() 
    { 
     _Find(); 
    } 
} 


// derived class 
public class splayTree:BST 
{ 
    public override void Find() 
    { 
     base.Find(); 
     ... 
    } 
    public override void Insert() 
    { 
     base.Insert(); 
     ..... 
    } 
} 
相關問題