unity开发 --------- c# 基本语法 007

关联内容

c#基本语法       http://blog.csdn.net/u012085988/article/details/19981161



1、委托

学过c++的人可以这么理解,委托就是一个仿函数(函数对象),里面存储了对象指针,和函数指针。只不过c#不需要程序员手动写这个仿函数,它在内部帮我们完成。

委托使用关键字delegate。语法为 修饰符 + delegate + 返回值 + 委托类型名 + 参数表

public delegate string GetString ( string key );
使用时用这里的GetString其实是相当于类型名,寓意这含有这样的返回值和参数表的一类函数!下面是使用方法

GetString fobj = new GetString(x.getString);

fobj("myKey");
这里传入的参数x.getString。其中x为实例,getString为x的成员函数。其实第一步并没有调用x.getString()函数,而是将x和getString传入GetString构造函数。真正的调用部分在fobj("myKey");

构造委托变量时,也可以用

GetString fobj = x.getString;

除了代理,c#中还可以用Func<T>和Action<T>

delegate只能包含一个方法调用,Action可以实现多播委托。Action用+, +=来添加被委托函数。

delegate还能作用域匿名方法:

Func<string, string> test = delegate(string arg)
{
   // 匿名函数函数体
}

test("hehe"); // 调用函数

2、Lambda

=>符号

=>左边是参数,右边是函数体。

Func<double, double, double> fobj = (double x, double y) => { 
    // 函数体
    return x + y;
};

3、事件

事件基于委托,为委托提供了一种 发布/订阅 机制。

同属性一样,事件也有两种写法,一种简写形式,一种全写方式。

public event EventHandler<Arg> eventlist;//   简写方式
private delegate EventHandler<Arg> eventList;    // 复杂方式

public event EventHandler<Arg> EventList
{
    add
    {
        eventsList += value;
    }
    remove
    {
        eventsList -= value;
    }
}
一般都用简写方式就行了,除非有特殊情况,要执行某些特使转换,才会写全定义模式。

处理函数的形式一般也要按照一定规范:如返回值为void, 含有两个参数

public void FuncTest(object sender, Arg arg);

注册事件用+, 注销事件用-;


4、弱事件

这个概念类似于lua中的弱表。当监听器不再使用时,在eventList中仍保留一个引用,那么这个监听器就不能被垃圾回收器回收。为了解决这个问题,可以使用弱事件(WeakEventManager)。

  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值