2017-03-12 160 views
1

我想知道是否有可能在一個對象的方法調用將調用另一個對象的方法時發生此類行爲。從其他對象調用方法的方法調用

public class Example 
{ 
    public void DoSomething() { /*BASICALLY NOTHING*/ } 
} 

public class Engine 
{ 
    public void DoSomething() { Console.WriteLine("bleee"); } 

    static void Main() 
    { 
     Example e = new Example(); 
     Engine eng = new Engine(); 

     e.DoSomething = eng.DoSomething; 
    } 
} 

Example對象是完全虛擬的對象,但我想使用這個類的基類,並建立了東西更看中的頂部。

所以e.DoSomething()應該調用方法從eng.DoSomething()。我不能使用繼承或將Engine對象作爲參數傳遞給Example

可能嗎?如何實現這一目標?這種方法在某處使用嗎?

+0

我感覺代表在這裏。 –

回答

2

您無法按照您所描述的方式進行此操作,但您可以與代表一起完成此操作。現在

public class Example 
{ 
    public Action DoSomething {get; set;} 
} 

public class Engine 
{ 
    public void DoSomething() { Console.WriteLine("bleee"); } 

    static void Main() 
    { 
     Example e = new Example(); 
     Engine eng = new Engine(); 

     e.DoSomething = eng.DoSomething; 
    } 
} 

你可以說e.DoSomething(),它會通過調用吸氣,然後調用返回的動作通過委託調用。

+0

是否可以用反射或某種類型的IL重寫來做到這一點? – Puchacz

0

使用反射我們可以使用相同類型的信息進行方法調用。但其他類型的方法是不可能的。我想是這樣。