C#中获取Func<T>请求方法参数
Get Func<T> request method Parameters in C#
我有两个函数有一些共同的功能(即与服务建立连接并在调用后关闭连接)。我在 it.How 中创建了一个名为 "InvokeService" 的方法,参数为 Func 我可以在 InvokeService 中获取请求的参数吗?我的意思是我需要获取请求的对象值?您可以通过我下面给出的演示代码清楚地了解:
public void Method1(){
InvokeService(()=> _service.getMathod1(request);
}
public void Method2(){
InvokeService(()=> _service.getMathod2(request);
}
public void InvokeService(Func<T> request){
//service open
//I need here a complete object of the request of Method2 and its parameters
request.Invoke();
//service close
}
如果有任何不明确或不明白的地方,请随时问我。
您可能想要使用 template method 模式:
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
在你的情况下,你可以有这样的东西:
public abstract class AbstractClass
{
protected abstract void PrimitiveOperation();
public void TemplateMethod()
{
// before common functionality
PrimitiveOperation();
// after common functionality
}
}
class ConcreteClassA : AbstractClass
{
protected override void PrimitiveOperation()
{
// your A logic
}
}
class ConcreteClassB : AbstractClass
{
protected override void PrimitiveOperation()
{
// your B logic
}
}
如果你想 return 每个具体 class 不同的东西或者根据具体 class 有不同的参数,你可以用泛型来实现。让我知道是否是这种情况。
可以通过反射解决;
request.GetMethodInfo()
我有两个函数有一些共同的功能(即与服务建立连接并在调用后关闭连接)。我在 it.How 中创建了一个名为 "InvokeService" 的方法,参数为 Func 我可以在 InvokeService 中获取请求的参数吗?我的意思是我需要获取请求的对象值?您可以通过我下面给出的演示代码清楚地了解:
public void Method1(){
InvokeService(()=> _service.getMathod1(request);
}
public void Method2(){
InvokeService(()=> _service.getMathod2(request);
}
public void InvokeService(Func<T> request){
//service open
//I need here a complete object of the request of Method2 and its parameters
request.Invoke();
//service close
}
如果有任何不明确或不明白的地方,请随时问我。
您可能想要使用 template method 模式:
Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
在你的情况下,你可以有这样的东西:
public abstract class AbstractClass
{
protected abstract void PrimitiveOperation();
public void TemplateMethod()
{
// before common functionality
PrimitiveOperation();
// after common functionality
}
}
class ConcreteClassA : AbstractClass
{
protected override void PrimitiveOperation()
{
// your A logic
}
}
class ConcreteClassB : AbstractClass
{
protected override void PrimitiveOperation()
{
// your B logic
}
}
如果你想 return 每个具体 class 不同的东西或者根据具体 class 有不同的参数,你可以用泛型来实现。让我知道是否是这种情况。
可以通过反射解决; request.GetMethodInfo()