2012-07-08 55 views
0

我想製作一段代碼,它將存儲一個類引用並能夠調用其中的特定函數。這意味着我可以換出課程來實現不同的功能。因此,例如,我可以有一個類的實例保持存儲類委託並調用一個特定的函數

 classDelegate cl = new ofSomeClass(); 
    cl.executeFunction("functionName"); 

換句話說,我可以初始化一類,以便計算1 + 1和另一種其計算2 + 2。這樣我就可以動態地換出計算結果,只需傳遞一個不同的類來初始化cl。

這是一個痛苦的解釋...希望我做了一些道理......這是可能的嗎?

回答

1

您發佈的問題是有些模糊,但它聽起來像你需要定義一個接口,然後讓每個differen類實現該接口。在你的榜樣,在那裏你引用一個「計算」的方法,你只定義一個接口是這樣的:

public interface ICalculator 
{ 
    int NumberOne 
    { 
     get; 
     set; 
    } 

    int NumberTwo 
    { 
     get; 
     set; 
    } 

    int Calculate (); 
} 

然後當您創建不同的類別,他們將實現這樣的接口:

public class TwoPlusTwoCalculator : ICalculator 
{ 
    private int _numberOne; 

    private int _numberTwo; 

    public int NumberOne 
    { 
     get 
     { 
      return this._numberOne; 
     } 
     set 
     { 
      this._numberOne = value; 
     } 
    } 

    public int NumberTwo 
    { 
     get 
     { 
      return this._numberTwo; 
     } 
     set 
     { 
      this._numberTwo = value; 
     } 
    } 

    public TwoPlusTwoCalculator () 
    { } 

    public TwoPlusTwoCalculator (int numOne, int numTwo) 
    { 
     this.NumberOne = numOne; 
     this.NumberTwo = numTwo; 
    } 

    public int Calculate () 
    { 
     return this.NumberOne + this.NumberTwo; 
    } 
} 

然後在你的代碼時,你想調用的計算方法,就可以把TwoPlusTwoCalculator,或OnePlusOneCalculator,或實現接口作爲接口的任何其它類的一個實例:

公共無效的GetValue(INT numOne ,int num兩個) {TwoPlusTwoCalculator calculator = new TwoPlusTwoCalculator(numOne,numTwo); PerformCalculation(calculator as ICalculator); PerformCalculation(calculator as ICalculator); }

public int PerformCalculation (ICalculator calculator) 
    { 
     return calculator.Calculate (); 
    } 

這就是你想要完成的嗎?

0

可能...也並不完全清楚自己想要做什麼:

如果你試圖通過名字來稱呼方法 - 使用反射 - GetMethod(string)Invoke

您ASLO可以有多個類implemeting的接口:

interface MyFunctions{ 
    void ExecuteFunction(string name); 
    } 

或者使用派生類與共同的基類(類似於接口):

public abstract class MyFunctionBase { 
    abstract void ExecuteFunction(string name); 
} 

或者乾脆使用Action類:

Action myFunc =()=> 1+1; 
myFunc();