A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ljh4282158 中级黑马   /  2013-6-12 14:39  /  1482 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ljh4282158 于 2013-6-12 22:33 编辑

一、操作符的重载
***语法

//定义"+"操作符的重载
//操作符的重载必须是static的,关键词operator
        public static Time operator +(Time t, Time t2)
        {
                ...
        }
例2:
类型转换
//把int类型的数据转换成Time类型,显示转换explicit
        public static explicit operator Time(int i)
        {
            //3700=3600+100
            int hour = i / 3600;//两个整数相除只保留结果的整数部分
            int minute=(i%3600)/60;
            int second = i % 60;
            Time t1=new Time(hour,minute,second);
            return t1;
        }
例3:
        //把Time类型的数据转换为DateTime,隐式转换implicit
        public static implicit operator DateTime(Time t)
        {
            DateTime time = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, t.hour, t.minute, t.second);
            return time;
        }
--------------------------------------------------------------------


二、委托
***是什么?作用?
委托相当于C++中的指针,用来指向方法
委托可以把指向的方法当作参数传给另一个方法或事件


***定义
//delegate关键字定义委托
语法:
//语法结构:delegate返回值类型 委托名(参数列表)
注意:定义委托的返回值类型和参数列表必须和委托指向的方法的返回值类型和参数列表一样
例:delegate void ActionDelegate();


***使用
例:
//委托是引用类型,那么委托也能当作方法的参数来传递
        public void Action(ActionDelegate ad)
        {
            Console.WriteLine("下面将执行通过委托传进来的方法");
            ad();//执行委托传进来(指向的)的方法
        }

例:

            Human human = new Human();
            //创建一个委托的对象
            ActionDelegate ad = new ActionDelegate(human.Say);//只把方法名传进来就可以。方法名后面不要加小括号,加了后相当于调用执行方法。       //把委托当作参数传到一个方法
            human.Action(ad);
            human.Action(human.Study);//简写方式,直接把委托要指向的方法传进去(不用创建委托的对象)
例:
ActionDelegate ad4 = new ActionDelegate(stu.Sleep);
            ad4 += human.Work;//用+=向委托添加方法
            ad4 += human.Study;
            ad4 -= human.Work;//用-=从委托中删除方法


            human.Action(ad4);
            Console.WriteLine("------------------------------");
            ad4();//可以直接执行委托指向的方法
----------------------------------------------------------------------------
三、事件
***是什么?作用?
事件是一种消息机制,是用来通知方法执行的
***定义
event关键词定义事件,事件要和委托结合起来一起使用

访问修饰符 event 委托名 事件名;
例: public event ActionDelegate Trigger;

一般都是在构造函数内通过委托给事件添加方法
例:
  public Human()
        {
            //通过委托把方法传给事件
            //一旦触发事件,事件就会通知所有传过来的方法执行
            Trigger+=new ActionDelegate(Hello);
            Trigger+=new ActionDelegate(Eat);
            Trigger+=new ActionDelegate(Bye);
        }

public void Fuse()//导火线,它是触发事件的方法
        {
            if (Trigger != null)
            {
                //如果事件上有方法那么通知它们执行
                Trigger();
            }

***触发事件
例:
Human human = new Human();
            //触发事件
            human.Fuse();//Fuse这个方法的执行触发了Trigger事件,然后事件就通知它的方法(委托传给事件的)执行。
经典例子:猫叫了,老鼠跑了,人醒了
delegate  void A();
  class Cat
  {
       public event A OnCry;

        public void Say()
        {
                Console.WriteLine("猫叫了");
                OnCry();//触发事件


        }
      public void Fk()
      {
        if(OnCry!=null)
      {
        OnCry();
      }
      }
    }
    class Mouse

    {
        public Mouse(Cat cat)
        {
            cat.OnCry += new A(Run);
        }
        public void Run()
        {
            Console.WriteLine("老鼠跑了");
        }
    }
    class Master
    {
        public Master(Cat cat)
        {
            cat.OnCry+=new A(Weak);

        }
        public void Weak()
        {
            Console.WriteLine("主人醒了");
        }


评分

参与人数 1技术分 +2 收起 理由
杞文明 + 2 很给力!

查看全部评分

2 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
基础知识,同学们可以看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马