c# 基础

来源:互联网 发布:淘宝图片护盾哪里设置 编辑:程序博客网 时间:2024/06/09 19:58

{{toc}}
!规范
!委托
1.委托的定义:
*可以理解为c中的函数指针,其作用相当于将一个函数A的指向另外一个或多个函数,此时运行函数A就相当于运行了另外的函数

2.委托的声明:
*<访问修饰符> delegate 返回值类型 委托名(<参数>);
**例:public delegate int MyDelegate(int num);
**PS.多个参数之间用”,”分开。

3.委托的实例化:
*实例化委托用New来实例化:
*委托名 实例化名 = new 委托名(函数名);

*以上述声明的委托为例,实例化一个委托。
*MyDelegate md = new MyDelegate(Add); //Add是一个函数

4.上述情况例子
class TestDelegate
{
//声明了一个委托,委托的返回值类型是int型,传入的参数是单参的int型数据
public delegate int MyDelegate(int num);

//声明一个Add函数作用是将传进来的参数加10后返回private static int Add(int num){    System.Console.WriteLine("Add Function----{0}", num + 10);    return num + 10;}static void Main(string[] args){    //实例化委托    MyDelegate md = new MyDelegate(Add);    //调用委托    md(10);    //返回值测试    int num = md(20);    System.Console.WriteLine("Main Function---{0}", num);}/*输出结果如下:Add Function----20Add Function----30Main Function---30*/

}

5.委托的多播
*概念:委托的多播相当于将多个函数一起打包到一个委托中去调用,执行这个委托时就会按照打包的列表顺序来执行各个函数。
*委托的多播是用”+”号来将多个函数打包的。需要注意的是必须是同种类型的委托才能连接。

6.举例
*MyDelegate md1 = new MyDelegate(Add);
*MyDelegate md2 = new MyDelegate(Del);
*md1 += md2;
*或者
*MyDelegate md1 = new MyDelegate(Add);
*md1 += new MyDelegate(Del);

7.上述情况例子
class TestDelegate
{
//声明了一个委托,委托的返回值类型是int型,传入的参数是单参的int型数据
public delegate int MyDelegate(int num);

//声明一个Add函数作用是将传进来的参数加10后返回private static int Add(int num){    System.Console.WriteLine("Add Function----{0}", num + 10);    return num + 10;}private static int Del(int num){    System.Console.WriteLine("Del Function----{0}", num - 1);    return num - 1;}static void Main(string[] args){    //实例化委托    MyDelegate md = new MyDelegate(Add);    //委托的多播    md += new MyDelegate(Del);    //调用委托    int num = md(20);    System.Console.WriteLine("Main Function---{0}", num);}/*输出结果如下:Add Function----30Del Function----19Main Function---19*/

}
!事件
1.事件
*事件表示C#中已定义的一个对象,即处理通知过程的对象。

2.事件的声明:
*<访问修饰符> event 委托名 事件名;
*事件是需要和委托联合起来使用的,因此声明一个事件之前得先声明一个委托,在通过这个委托的类型来声明这个事件。

*a.定义事件:
*public delegate void MyDelegate();
*public event MyDelegate MyEvent;

*b.订阅事件:
*事件名 += new 委托名(函数名);
*testEvent.MyEvent += new MyDelegate(Run);

  • c.触发事件
    *通过某个动作来触发事件

    3.举例说明
    class TestDelegate
    {
    static void Main(string[] args)
    {
    TestEvent testEvent = new TestEvent();
    RunTest rTest = new RunTest();
    testEvent.MyEvent += new TestEvent.MyDelegate(rTest.Run);
    testEvent.StartEvent();
    }
    }
    public class TestEvent
    {
    public delegate void MyDelegate();
    public event MyDelegate MyEvent;

    public void StartEvent()
    {
    if(MyEvent != null)
    {
    MyEvent();
    }
    //MyEvent?.Invoke();
    }
    }
    public class RunTest
    {
    public void Run()
    {
    System.Console.WriteLine(“Run Function…”);
    }
    }
    /*
    运行结果是:
    Run Function…
    */
    !同步
    !异常

原创粉丝点击