.NET中的泛型委托

.Net中有一个内置的委托 Func

它总共有以下5种形式

1.  Func<TResult>

2.  Func<T,TResult>

3.  Func<T1,T2,TResult>

4.  Func<T1,T2,T3,TResult>

5.  Func<T1,T2,T3,T4,TResult>

上面5种形式,第1种 Func<TResult> 没有参数,只有返回值

我们来看一个例子

private delegate string MyDelegate();

public static string OutputDelegate()
{
     return "Test delegate";
}

public static void Main(string[] args)
{
          MyDelegate testFunc = OutputDelegate;
   
          Console.WriteLine(testFunc());  // 输出 Test delegate
     
}

在这个例子中,我们自己定义了一个委托MyDelegate. 但是 上面我们也说了,.Net中有自己内置的委托,或者说是.Net中默认自带的委托, 我们来看看如何使用.Net自带的委托 Func<TResult>

public static string OutputDelegate()
{
     return "Test delegate";
}

public static void Main(string[] args)
{
          Func<string> testFunc = OutputDelegate;
   
          Console.WriteLine(testFunc());  // 输出 Test delegate
     
}

在上面,我们使用了.net自带的委托的第一种类型Func<TResult>, 这个委托没有参数传入,返回值类型为TResult. 由于上面OutputDelegate方法中返回string类型,所以对应委托就是Func<string>

如果有参数呢,我们就需要使用其他4种形式了。 我们来看一看第2种形式委托Func<T,TResult>的使用

public static string OutputDelegate(string testStr)
{
     return testStr + testStr;
}

public static void Main(string[] args)
{
          Func<string,string> testFunc = OutputDelegate;

          string strResult = testFunc("test");
   
          Console.WriteLine(strResult);  // 输出 test test
     
}

 上面的.Net内置委托Func也支持Lambda的形式调用, 我们来看一个例子

Func<string,string> myDelegate = x => x + x;

Console.WriteLine(myDelegate("test")); // 输出 testtest

我们现在属性了这个内置委托Func,那么它一般在哪里使用呢,或者说在什么场景下使用比较多呢

事实上,在编程过程中,它使用最多的场景是作为函数的参数,比如下面这样

string GetResult(Func<string,string>)

在这个方法中,参数是一个代理,我们通常会通过传入一个Lambda表达式,这个代理输入参数是string类型,而返回值也是string类型,所以你看GetResult函数的返回类型就是string类型

猜你喜欢

转载自www.cnblogs.com/wphl-27/p/9442281.html