今天学的主要是委托事件,和一些还有接口
先来看委托,首先要说委托是一种类型,它可以把方法包装成一个类型进行传递。委托在引用方法时只要方法的签名与委托签名相匹配就行了,它并不认修饰符。
委托类型派生自.NET Frameword中的Delegate类。委托类型是密封的。
namespace 委托
{
    class Program
    {
        static void Main(string[] args)
        {
            Greeting gt = new Greeting();
     
             gt.MD+= gt.English;
            gt.GreetPeopre("tom");

            gt.MD -= gt.English;
            gt.MD += gt.Chinese;
            gt.GreetPeopre("张三");
            Console.ReadLine();
        }


    }
    class Greeting
    {
        public MyDelegate MD;

        public void GreetPeopre(string name)
        {
            MD(name);
        }
       

        public void English(string name)
        {
            Console.WriteLine("Hello,"+name);
        }

        public void Chinese(string name)
        {
            Console.WriteLine("早上好,"+name);
        }
    }

    public delegate void MyDelegate(string s);
}

委托中还有两个名词:委托的协变,委托的逆变
委托的协变是允许方法的返回类型要比委托的返回类型范围小。因为传递返回值时,是将方法的返回值传递给委托,所以委托的返回值类型表示的范围要比方法的类型要广,以接收方法传递过来的返回值。
委托的逆变:它是允许方法的参数类型比委托的参数表示的范围要大。因为在参数传递时,是通过委托将参数传递给方法,为了接收从委托传递过来的参数,方法的参数类型表示的范围要比委托的广。
其实协逆变都是把子类型赋值于父类型的过程。协变时委托的返回值类型是父类型,逆变时委托的返回值类型是子类型。
说到了委托就不得不说说事件了。其实声明一个事件不过类似于声明一个进行了封装的委托类型的变量而已。
定义事件可以分为五步:
1.定义委托
2.定义事件
3.定义方法
4.事件订阅方法
5.调用事件
 class Program
    {
        static void Main(string[] args)
        {
            Program p = new Program();
            //事件订阅方法
            p.MyEve+=new MyDel(MyMethod);
            //调用事件
            p.MyEve();
        }
       
        //定义方法
        static void MyMethod()
        {
            Console.WriteLine("我的方法");
        }

        //定义事件
        event MyDel MyEve;
    }

    //定义委托
    delegate void MyDel();
看完了委托和事件,我们再来说说几个类。
密封类:密封类不能用做基类,但它可以继承其它类(但它不可以继承静态类),关键字sealed
静态类静态类既不可以被继承,也不可以继承其它类。所以静态方法可以被重载,但不能被重写。静态类中仅包含静态成员,因此它们不能被实例化。在这里,说一下代理不可以是静态的,但事件可以是静态的。关键字static
抽象类:与静态类相同,抽象类也不能实例化。抽象类中既可以有抽象成员也可以有非抽象成员。当有实例化类继承它时,子类必须通过override实现抽象类中的抽象成员。事件,方法,属性,索引器都可以是抽象的。关键字abstract。
最后有接口,接口好像也没什么说的,总结来说,接口中的所有成员都不能有实现,接口也不能直接实例化,接口中可以包含事件,属性,方法,索引器,接口不能继承类,只能继承接口。接口是可以多继承的,这点与类不同