2017-02-23 70 views
-3

我在基類中的以下方法:C#調用基方法與另一本

public class Base 
{ 
protected string Make(string param) 
     { 
      return this.ClientID + "_" + configParam; 
     } 
} 

,我有另一個類

public class Class2 : Base 
{ 

} 

而且

public class Class3 : Base 
{ 
//HERE i would like to call Make but with the THIS as Class2, not the current - Class3. 
} 

這是可能的?

謝謝。

+7

簡答題。 NO – Nkosi

+0

感謝Nikosi的回答。 –

+4

通過您所擁有的類的結構,'Class3'是'Class2'的_sibling_。這些類彼此不相關。從生物學的角度來看,你從父母繼承遺傳學,而不是你的兄弟和姐妹。 – krillgar

回答

1

假設你想要的Base只有子類調用Make,即使它不是自己Make,你可以添加一個protected調用方法(我把它叫做InvokeSiblingMake):

public class Base 
{ 
    private string ClientID; 
    protected string Make(string param) 
    { 
     return this.ClientID + "_" + param; 
    } 

    protected void InvokeSiblingMake(Base other) 
    { 
     other.Make("hello world"); 
    } 
} 

public class Class2 : Base 
{ 

} 

public class Class3 : Base 
{ 
    //HERE i would like to call Make but with the THIS as Class2, not the current - Class3. 
    public void Test(Class2 other) 
    { 
     InvokeSiblingMake(other); 
    } 
} 
+0

哎呀,這是令人費解和醜陋的,但它確實有效。 – krillgar

+1

@krillgar從生物學角度思考,就像跑向你的父母,並要求他們讓你的兄弟做菜:P – grek40

0

隨着類的結構你有Class3Class2的兄弟姐妹。你從你的父母繼承,而不是你的兄弟和姐妹。這意味着無法通過baseClass3乾淨地調用Class2上的方法

有辦法通過給Class2成員變量Class3,但在那一點上,你沒有使用繼承。在這種方法中,Class2可以繼承自System.Object,System.DateTime或您可能創建的任何其他類。然後你代理上的屬性設置爲屬性不是通過繼承