我想编写一段代码来存储类引用并能够在其中调用特定的函数。这意味着我可以换掉这个类来实现不同的功能。例如,我可以拥有一个类实例
classDelegate cl = new ofSomeClass();
cl.executeFunction("functionName");
换句话说,我可以初始化一个计算 1+1 的类,然后初始化另一个计算 2+2 的类。这样我就可以动态地交换计算,只需传递一个不同的类来初始化 cl 。
这很难解释……希望我能说得通……这可能吗?
您发布的问题有些模糊,但听起来您需要定义一个接口,然后让每个不同的类实现该接口。在您的示例中,您引用了“计算”方法,您只需定义一个这样的接口:
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 计算器 = new TwoPlusTwoCalculator ( numOne, numTwo ); PerformCalculation ( 计算器为 ICalculator ); }
public int PerformCalculation ( ICalculator calculator )
{
return calculator.Calculate ( );
}
这就是你想要完成的事情吗?
可能......也不清楚你想要做什么:
如果您尝试按名称调用方法 - 使用反射 -GetMethod(string)
和Invoke
你也可以有多个类来实现一个接口:
interface MyFunctions{
void ExecuteFunction(string name);
}
或者使用具有公共基类的派生类(类似于接口):
public abstract class MyFunctionBase {
abstract void ExecuteFunction(string name);
}
或者简单地使用Action
类:
Action myFunc = ()=> 1+1;
myFunc();