怎么在实例和方法之间建立一对一的对应关系?

shishiranya 2023-10-02 21:26:36

就是可以通过这个实例调用我让他对应的这个静态方法,这些方法都在同一个静态类中

...全文
202 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

可以使用 .net 框架 Lazy<> 来通过对象调用方法,并且获取方法要返回的信号值。例如一个复杂计算方法中有许多分支、每一个分支中有许多子分支,子分支中又有许多“孙”分支.......其中某些分支公用某个计算方法,我们只希望此计算方法仅仅计算一次,但是为性能考虑,又仅仅希望此计算方法仅仅在“第一次有必要使用时”才调用,就可以使用 Lazy 编程模式。

田园里的猫 2023-10-02
  • 打赏
  • 举报
回复

你可以通过使用委托(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的实例来调用关联的静态方法。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧