您的位置:首页 > 其它

匿名方法与Lambda表达式,事件,一些应用

2012-07-08 14:46 337 查看
1.匿名方法与Lambda表达式
> 有时考虑方法只用一次的时候考虑使用
<1>匿名方法
-> 定义一个委托
委托类型 变量名 = delegate(参数) {
// 方法体
}
FuncDelegate MyFunc = Func;
FuncDelegate MyFunc = delegate(int i)
{
Console.WriteLine("我是一个匿名方法, 传进来一个参数是{0}", i);
};
<2>Lambda表达式
-> => 运算符
委托类型 变量名 = (参数) => {
// 方法体
}
int num = 1234567;
FuncDelegate MyFunc = (i) =>
{
Console.WriteLine("我是一个Lambda表达式,传入一个参数为{0}", i);
Console.WriteLine(num);
};
//如果Lambda表达式只有一句话,花括号可省略
FuncDelegate MyFunc = (i) => Console.WriteLine(num);
MyFunc(100);
2.事件
事件基于委托,为委托提供了一种 发布/订阅 机制。
// 如果要控制需要在外界添加方法,但是不让在外界调用
// 声明一个私有委托,然后添加一个可以增加方法与移除方法的属性
public delegate void FuncDelegate();
class Program
{
static void Main(string[] args)
{ MyClass m = new MyClass();
m.MyFunc += Func1;
// 即可以再外界(在类MyClass外的其他类中为他添加方法)
// 添加方法的语法(写上事件名 += tab)
m.MyFunc += new FuncDelegate(m_MyFunc);
m.Run();
Console.ReadKey();
}
static void m_MyFunc()
{
Console.WriteLine("tab出来的方法");
}
public static void Func1()
{
Console.WriteLine("哈哈哈");
}
}
class MyClass
{
public event FuncDelegate MyFunc;
public void Run()
{
MyFunc();
}
}
3.一些应用
<1>类型推断
var v = "100";
Console.WriteLine(v); //自动判断类型。
不确定的不能用Var
比如数组
var(int,double)[] v1 = { 1, 2, 3 };
<2> 匿名类型
var person = new
{
Name = "张三",
Age = 19,
Gender = '男'
};
Console.WriteLine(person.Name);
Console.ReadKey();
<3> 初始化器
int[] nums = new int[] { 1, 2, 3 };
List<int> numList = new List<int>() { 11, 22, 33, 44, 55, 66 };
Person p = new Person() { Age = 19, Gender = '男', Name = "张三" };
<4>运算符重载

public static explicit operator int(Person value)
{
// 目标类型 o = new 目标类型();
// 赋值操作,显示转换中可以将赋值操作用checked{...}块包起来,如放不下就异常
return value.Age;
}
public static int operator +(Person p1, Person p2)
{
// 实际运算方式
return p1.Age + p2.Age;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: