这算是找资料时候的副产品吧。觉得很有意思,先记下来,以后可以继续研究。
函数式编程的几个特点:
- 函数并不总是需要名称。
- 函数可以像其他值一样分配给变量。
- 函数表达式可以先编写,留待以后应用。
- 函数可以作为参数传递给其他函数。
==========================================================
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);
}