函数式编程

这算是找资料时候的副产品吧。觉得很有意思,先记下来,以后可以继续研究。

函数式编程的几个特点:

函数并不总是需要名称。 函数可以像其他值一样分配给变量。 函数表达式可以先编写,留待以后应用。 函数可以作为参数传递给其他函数。

==========================================================

9月25日的心得:

函数式编程,在C#中主要通过代理函数(delegate function)来实现。

第一点,可以看成是一个匿名函数。匿名函数不需要名称。

delegate string delegateOutput (string val);

static void Main(string[] args)
{
   
string mid = "Output: ";
   delegateOutput op 
= delegate (string param)
   
{
       param 
+= mid + param;
       
return param;
   }
;

   Console.WriteLine (op(
"Test"));
   Console.ReadLine();
}

第二点,代理函数可以看成是一个变量,在必要的时候,可以当做一个变量来使用。比如,使用多重代理(Multicast Delegates)的时候。当然,事件的运用也是体现了这点。

delegate void MathOp (double value);

static void Main (string[] args)
{
   MathOp op1 
= new MathOp(MultiplyByTwo);
   MathOp op2 
= new MathOp(Square);
   MathOp op 
= op1 + op2;
   op (
2.0);
   Console.ReadLine();
}


public static void MultiplyByTwo (double value)
{
   
double result = value * 2;
   Console.WriteLine (
"MultiplyByTwo: " + result.ToString());
}


public static void Square (double value)
{
   
double result = value * value;
   Console.WriteLine (
"Square: " + result.ToString());
}

第三点,函数表达式可以先编写,留待以后应用。这点似乎没有什么可提的……

第四点,函数可以作为参数传递给其他函数。使用代理函数的时候,函数就是一个变量。这个函数变量可以作为参数传递给其他函数,并在其他函数中运用。

delegate void delegateTest(double val);

static void Main(string[] args)
{
    delegateTest t 
= new delegateTest(Test);
    TestDelegateVal(t);
    Console.ReadLine();
}


private static void Test(double val)
{
    Console.WriteLine(
"Test: " + val.ToString());
}


private static void TestDelegateVal(delegateTest d)
{
    Console.WriteLine(
"Starting...");
    d(
2.0);
}
阅读更多
个人分类: 五花八门
上一篇[代码模板]随机数的获取
下一篇[代码模板]将一个32位的二进制串反转
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭