委托 事件 密封类 静态类 抽象类 接口
(1)委托
委托是一种引用方法的类型,我们一旦为委托分配了方法,委托将与该方法具有完全相同的行为。
它的声明: 委托关键字 返回类型 名称(参数)
例如:delegate void Time();
委托的定义:
delegate void Dele(int i);
定义方法:
 public void Method(int i)
        {
            Console.WriteLine("参数为:{0}",i);
        }
关联委托和方法:
Program pro = new Program();
Dele del = new Dele(pro.Method);
del(100);
它允许将方法作为参数进行传递,它可用于定义回调方法,这个类似与异步调用,在发出命令之后,不需要等待结果,可以去干别的事情。这个目前就这么的理解了。而且匿名方法通常用委托来承载。
委托的多播:一个委托可以同时调用多个方法。
委托的协变:把子类型赋给父类型(返回值类型)
委托的逆变:形参为父类型,实参为子类型(参数)
(2)事件
类和对象可以通过事件向其他类或对象通知发生的相关事情,事件本质是一组方法。
在.Net Framework类库中事件是基于EventHandler委托和EventArgs基类的。
我们可以通俗的说:事件是调用别人的方法的,方法是被别人调用的。
定义事件的步骤:
1.定义委托 2.定义事件 3.定义与委托相配的方法 4.订阅事件 5.触发事件
   delegate void Dl();//定义委托
    class Ope
    {
        public event Dl sj;//定义事件
        int step;
        public int Step
        {
            set
            {
                step = value;
            }
       
        }
   
        public void Call()
        {
           Console.WriteLine("休息");
           Console.WriteLine( DateTime.Now.ToString());
            while (step > 0)
            {
                Thread.Sleep(1000);
                step--;
               Console.Clear();
                Console.WriteLine(DateTime.Now.ToString());
            }
            sj();//触发事件
         
        }
  
   
    }
    class Pro
    {
        static void Main()
        {
            int m = Int32.Parse(Console.ReadLine());
            Ope ope = new Ope();
            ope.Step = m;
            ope.sj += Show;//调用事件
            ope.Call();
 

        }
  
 //定义与委托相同的方法
        static void Show()
        {
            Console.WriteLine("开始上课了");
       
        }
    }

(3)密封类
 可以将类声明为密封类,方法是在类定义中将关键字sealed置于关键字class的前面。它不可以有子类。
sealed class MySeaClass
    {
     
    }
(4)静态类
静态类的主要功能:
它们仅包含静态类成员 不能被实例化 是密封的 不能包含实例构造函数 可以有静态的不加访问修饰符的构造函数它在调用静态字段或方法时被调用。
静态类不可以被继承也不可以继承别的类。
静态方法和属性只能访问静态字段和静态事件。
静态方法可以被重载。但不能被重写。
public abstract class A
 {
// Class members here. 静态的成员
}
(5)抽象类
抽象类是不可以被new 的 可以定义不是抽象的构造函数 不能对字段定义为抽象  可以对属性定义为抽象
事件可以是定义为抽象的。所有的抽象方法、属性、事件不能是私有的。
(6)接口
接口中所有的属性方法默认为public 也只能是public 但是通常省略不写。
用interfance定义接口
接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口中的所有成员。
不能直接实例化接口 接口可以包含事件、索引器、方法、属性
接口不包括方法的实现
类和结构可以继承多个接口 接口自身可以从多个接口继承。
interface IMyInterface
{
}
(7)
继承中除了私有成员,其他的成员都可以被子类继承到。
a.构造函数的继承
在继承中允许定义同样的构造函数。先调用父类的构造函数再调用子类的
在子类的方法没有被覆盖时,当子类调用时就调用自己的。
在定义构造函数时加new为显示隐藏不加new时为隐式隐藏。
子类的子类只能覆盖它的上一级不可能覆盖全部。
同一个类中只可能同时调用一个构造函数,除非你显式的调用,也就是在构造函数中new出另一个。
实质上也还是调用了一个构造函数。
b.抽象类的继承
若在父类中定义了有参数的构造函数,则在子类中需要用base(i)传参或定义一个有参数的构造参数。
所有的抽象成员在子类中都必须实现。
在抽象类中也可以实现父类中的抽象成员。
抽象类可以继承实例化的类。