我想创建一段代码来存储类引用,并且能够在其中调用特定的函数。这意味着我可以换出类来实现不同的功能。例如,我可以有一个类实例保持
classDelegate cl = new ofSomeClass();
cl.executeFunction("functionName");
换句话说,我可以初始化一个计算1 + 1的类,然后另一个计算2 + 2的类。通过这种方式,我可以动态地交换计算,只需将另一个类传递给inialize cl with。
这是一个痛苦的解释...希望我有一定道理......这有可能吗?
答案 0 :(得分:1)
您发布的问题有些模糊,但听起来您需要定义一个接口,然后让每个不同的类实现该接口。在您的示例中,您引用了“calculate”方法,您只需定义如下界面:
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;
}
}
然后在您的代码中,当您想要调用Calculate方法时,可以将TwoPlusTwoCalculator或OnePlusOneCalculator的实例或实现该接口的任何其他类转换为该接口:
public void GetValue(int numOne,int numTwo) {TwoPlusTwoCalculator calculator = new TwoPlusTwoCalculator(numOne,numTwo); PerformCalculation(计算器作为ICalculator); }
public int PerformCalculation ( ICalculator calculator )
{
return calculator.Calculate ( );
}
这是你想要完成的吗?
答案 1 :(得分:0)
可能......也不清楚你想做什么:
如果您尝试按名称调用方法 - 请使用反射 - GetMethod(string)
和Invoke
您也可以有多个类来实现接口:
interface MyFunctions{
void ExecuteFunction(string name);
}
或者使用具有公共基类的派生类(类似于接口):
public abstract class MyFunctionBase {
abstract void ExecuteFunction(string name);
}
或者只使用Action
class:
Action myFunc = ()=> 1+1;
myFunc();