111,120
社区成员
发帖
与我相关
我的任务
分享可以使用 .net 框架 Lazy<> 来通过对象调用方法,并且获取方法要返回的信号值。例如一个复杂计算方法中有许多分支、每一个分支中有许多子分支,子分支中又有许多“孙”分支.......其中某些分支公用某个计算方法,我们只希望此计算方法仅仅计算一次,但是为性能考虑,又仅仅希望此计算方法仅仅在“第一次有必要使用时”才调用,就可以使用 Lazy 编程模式。
你可以通过使用委托(Delegate)来实现实例和静态方法之间的一对一对应关系。具体来说,你可以创建一个委托类型,然后将实例与静态方法关联在一起。以下是实现这一目标的步骤:
1. 定义一个委托类型,该委托的签名与你要关联的静态方法的签名相匹配。
2. 在你的类中创建一个实例字段,用来保存该委托的实例。
3. 在类的构造函数中初始化该委托字段,将它关联到你想要调用的静态方法上。
4. 提供一个公共方法,以便外部代码可以通过实例来调用关联的静态方法。
using System;
// 定义一个委托类型,签名匹配静态方法的签名
delegate void MyDelegate(int value);
// 静态类,包含多个静态方法
public static class MyStaticClass
{
public static void MethodA(int value)
{
Console.WriteLine($"MethodA: {value}");
}
public static void MethodB(int value)
{
Console.WriteLine($"MethodB: {value}");
}
}
// 包含委托字段和构造函数的类
public class MyClass
{
private MyDelegate myDelegate;
// 构造函数中初始化委托字段
public MyClass(string methodName)
{
if (methodName == "MethodA")
{
myDelegate = MyStaticClass.MethodA;
}
else if (methodName == "MethodB")
{
myDelegate = MyStaticClass.MethodB;
}
}
// 公共方法,通过实例调用关联的静态方法
public void CallStaticMethod(int value)
{
myDelegate?.Invoke(value);
}
}
class Program
{
static void Main()
{
MyClass myInstanceA = new MyClass("MethodA");
MyClass myInstanceB = new MyClass("MethodB");
myInstanceA.CallStaticMethod(123);
myInstanceB.CallStaticMethod(456);
}
}
在这个示例中,我们定义了一个委托类型MyDelegate,然后在MyClass的构造函数中将委托字段关联到不同的静态方法上。最后,我们可以通过创建MyClass的实例来调用关联的静态方法。