20251017流程控制Demo
#region 2.类共同方法// 定义接口,所有类都实现这个接口public interface IExecutable{string Run(params object[] parameters);}public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){string className = "MethodA"; // 类名(不包含命名空间)string methodName = "MethodA"; // 类名(不包含命名空间)//string methodName = "MethodAExecute"; // 方法名object[] parameters = new object[] { 1.5 }; // 参数数组MethodFactory factory = new MethodFactory();try{var result = factory.ExecuteMethod(methodName, parameters);Console.WriteLine(result);}catch (Exception ex){Console.WriteLine(ex.Message);}}}public class MethodA: IExecutable{public string Run(params object[] parameters){return $"MethodA executed with parameter {parameters}";}}public class MethodB: IExecutable{public string Run(params object[] parameters){return $"MethodB executed with parameter {parameters}";}}public class MethodC : IExecutable{public string Run(params object[] parameters){return $"MethodC executed with parameter {parameters}";}}public class MethodD : IExecutable{public string Run(params object[] parameters){return $"MethodD executed with parameter {parameters}";}}public class MethodE : IExecutable{public string Run(params object[] parameters){return $"MethodE executed with parameter {parameters}";}}// 反射工厂类,用于动态执行方法public class MethodFactory{public ExecuteResult ExecuteMethod(string className, object[] parameters){// 使用完整类名(包含命名空间)获取类类型Type type = Type.GetType("WinForms_RPCActive." + className);if (type == null){throw new Exception($"Class {className} not found.");}// 创建类的实例object classInstance = Activator.CreateInstance(type);// 获取 'Run' 方法MethodInfo methodInfo = type.GetMethod("Run");if (methodInfo == null){throw new Exception($"Method 'Run' not found in class {className}.");}// 调用方法并返回结果return (ExecuteResult)methodInfo.Invoke(classInstance, parameters);}public ExecuteResult ExecuteMethodAll(List<string> classNames, object[] parameters){// 如果 classNames 列表为空,直接返回if (classNames.Count == 0){Console.WriteLine("No classes to execute.");return ExecuteResult.CreateFailedResult();}foreach (var className in classNames){try{// 调用 ExecuteMethod 执行每个类的 Run 方法ExecuteResult result = ExecuteMethod(className, parameters);if (result.Code==EnumResultCode.Fail){}Console.WriteLine($"Execution result for {className}: {result}");return ExecuteResult.CreateSuccessResult();}catch (Exception ex){Console.WriteLine($"Error executing {className}: {ex.Message}");return ExecuteResult.CreateFailedResult();}}return ExecuteResult.CreateSuccessResult();}}public class ExecuteResult{public ExecuteResult() { }public object CurrentFailFunc { get; set; }public object NextFunc { get; set; }/// <summary>/// 执行结果/// </summary>public EnumResultCode Code { get; set; }/// <summary>/// 返回消息/// </summary>public string? Message { get; set; }/// <summary>/// 返回数据1/// </summary>public object? Data { get; set; }/// <summary>/// 返回列表数据/// </summary>public Dictionary<string, object> DataDict { get; set; }/// <summary>/// 执行成功/// </summary>/// <param name="message"></param>/// <param name="data"></param>public void IsSuccess(string message = "", object? data = null){Code = EnumResultCode.Success;Message = message;Data = data;}public static ExecuteResult CreateSuccessResult(string? _message = "", object? _data = null){return new ExecuteResult() { Code = EnumResultCode.Success, Message = _message, Data = _data };}public static ExecuteResult CreateFailedResult(string? _message = "初始设定-Fail", object? _data = null){return new ExecuteResult() { Code = EnumResultCode.Fail, Message = _message, Data = _data };}public static ExecuteResult CreateGoOndResult(string? _message, object? _data = null){return new ExecuteResult() { Code = EnumResultCode.GoOn, Message = _message, Data = _data };}}public enum EnumResultCode{[Description("执行失败")]Fail = 0,[Description("执行成功")]Success = 1,[Description("继续执行")]GoOn = 2}#endregion
#region 2.类共同方法
// 定义接口,所有类都实现这个接口
public interface IExecutable
{
string Run(params object[] parameters);
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string className = "MethodA"; // 类名(不包含命名空间)
string methodName = "MethodA"; // 类名(不包含命名空间)
//string methodName = "MethodAExecute"; // 方法名
object[] parameters = new object[] { 1.5 }; // 参数数组
MethodFactory factory = new MethodFactory();
try
{
var result = factory.ExecuteMethod(methodName, parameters);
Console.WriteLine(result);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
public class MethodA: IExecutable
{
public string Run(params object[] parameters)
{
return $"MethodA executed with parameter {parameters}";
}
}
public class MethodB: IExecutable
{
public string Run(params object[] parameters)
{
return $"MethodB executed with parameter {parameters}";
}
}
public class MethodC : IExecutable
{
public string Run(params object[] parameters)
{
return $"MethodC executed with parameter {parameters}";
}
}
public class MethodD : IExecutable
{
public string Run(params object[] parameters)
{
return $"MethodD executed with parameter {parameters}";
}
}
public class MethodE : IExecutable
{
public string Run(params object[] parameters)
{
return $"MethodE executed with parameter {parameters}";
}
}
// 反射工厂类,用于动态执行方法
public class MethodFactory
{
public ExecuteResult ExecuteMethod(string className, object[] parameters)
{
// 使用完整类名(包含命名空间)获取类类型
Type type = Type.GetType("WinForms_RPCActive." + className);
if (type == null)
{
throw new Exception($"Class {className} not found.");
}
// 创建类的实例
object classInstance = Activator.CreateInstance(type);
// 获取 'Run' 方法
MethodInfo methodInfo = type.GetMethod("Run");
if (methodInfo == null)
{
throw new Exception($"Method 'Run' not found in class {className}.");
}
// 调用方法并返回结果
return (ExecuteResult)methodInfo.Invoke(classInstance, parameters);
}
public ExecuteResult ExecuteMethodAll(List<string> classNames, object[] parameters)
{
// 如果 classNames 列表为空,直接返回
if (classNames.Count == 0)
{
Console.WriteLine("No classes to execute.");
return ExecuteResult.CreateFailedResult();
}
foreach (var className in classNames)
{
try
{
// 调用 ExecuteMethod 执行每个类的 Run 方法
ExecuteResult result = ExecuteMethod(className, parameters);
if (result.Code==EnumResultCode.Fail)
{
}
Console.WriteLine($"Execution result for {className}: {result}");
return ExecuteResult.CreateSuccessResult();
}
catch (Exception ex)
{
Console.WriteLine($"Error executing {className}: {ex.Message}");
return ExecuteResult.CreateFailedResult();
}
}
return ExecuteResult.CreateSuccessResult();
}
}
public class ExecuteResult
{
public ExecuteResult() { }
public object CurrentFailFunc { get; set; }
public object NextFunc { get; set; }
/// <summary>
/// 执行结果
/// </summary>
public EnumResultCode Code { get; set; }
/// <summary>
/// 返回消息
/// </summary>
public string? Message { get; set; }
/// <summary>
/// 返回数据1
/// </summary>
public object? Data { get; set; }
/// <summary>
/// 返回列表数据
/// </summary>
public Dictionary<string, object> DataDict { get; set; }
/// <summary>
/// 执行成功
/// </summary>
/// <param name="message"></param>
/// <param name="data"></param>
public void IsSuccess(string message = "", object? data = null)
{
Code = EnumResultCode.Success;
Message = message;
Data = data;
}
public static ExecuteResult CreateSuccessResult(string? _message = "", object? _data = null)
{
return new ExecuteResult() { Code = EnumResultCode.Success, Message = _message, Data = _data };
}
public static ExecuteResult CreateFailedResult(string? _message = "初始设定-Fail", object? _data = null)
{
return new ExecuteResult() { Code = EnumResultCode.Fail, Message = _message, Data = _data };
}
public static ExecuteResult CreateGoOndResult(string? _message, object? _data = null)
{
return new ExecuteResult() { Code = EnumResultCode.GoOn, Message = _message, Data = _data };
}
}
public enum EnumResultCode
{
[Description("执行失败")]
Fail = 0,
[Description("执行成功")]
Success = 1,
[Description("继续执行")]
GoOn = 2
}
#endregion