Delegate、Action、Func

Delegate

delegate int TestDelegate();

创建一个委托实例实质上是创建一个方法的引用,创建实例时关键是要明白TestDelegate没有任何构造器,它有一个隐式的构造函数来构造一个与它相同签名的方法(没有传入参数,返回一个整数)。怎么给这个构造函数一个方法呢?

delegate int TestDelegate();
public static int Number()
{
    return 1;
}
public void Show()
{
    TestDelegate test = new TestDelegate(Number);
    int i = test();
}

 

 

Action与Func

Action,方法没有返回值,使用Action,或Action<>

public void TestAction()
{//无参数无返回值
    Console.WriteLine("测试Action");
}

public void TestAction(int x,int y)
{//有参数无返回值
    Console.WriteLine($"测试Action{x}+{y}");
}

public void Show()
{
    {
        Action action = TestAction;
        action.Invoke();
    }
    {
         Action<int,int> action = TestAction;
         action.Invoke(1,2);
    }
}

 

 

Func,方法有返回值,则是用Func,或者Func<>

public string TestFunc()
{//只返回值
    return "测试Func";
}

public string TestFunc(string str)
{//有参数有返回值
    return "测试Func" + str;
}

public void Show()
{
    {
        Func<string> func = TestFunc;
        Console.WriteLine(func.Invoke());
    }
    {
         Func<string,string> func = TestFunc;
         Console.WriteLine(func.Invoke("string"));
    }
    {//Lambda表达式写法
         Func<int,string> func = i =>
         {
            return $"{i}";
         };
    }
}    

 

posted @ 2022-08-23 16:37  celestially98  阅读(31)  评论(0)    收藏  举报