.net基础加强

一、里氏替换:子类可以直接赋值给父类变量、父类可以强制转换为对应的子类对象
is bool 变量 is 类型
as 类型对象 变量 as 类型

        MyBase mb;
        MyClass1 mc1 = new MyClass1();
        MyClass2 mc2 = new MyClass2();
        mb = mc1;
        if (mb is MyClass1)
        {
            MyClass1 m1 = (MyClass1)mb;
            Console.WriteLine("ok");
        }
        else
        {
            Console.WriteLine("no");
        }
        
        Console.ReadKey();


        MyClass2 mm2 = mb as MyClass2;
        if(mm2!=null)
        {
            Console.WriteLine("ok");
        }
        else
        {
            Console.WriteLine("no");
        }

二、多态实现方式:

      1、new 隐藏基类方法实现
        MyClass c1 = new MyClass();
        //c1.Func();
        //MyBase b = c1;
        //b.Func();
        ((MyBase)c1).Func();//对象没有变,变的是环境,但是表现出来的结果是不一样的
        //new 是隐藏基类方法,调用时看类型,类型决定调用的方法是谁提供的
        Console.ReadKey();
      2、virtual虚方法实现,子类override重写
        class MyBase
        {
          public virtual void Func()
          {
           Console.WriteLine("父类的方法");
          }
        }

       class MyClass:MyBase
       {
          public override void Func()
          {
            Console.WriteLine("子类的方法");
          }
       }

        //MyBase m = new MyBase();
        MyClass m1 = new MyClass();
        m1.Func();//子类的方法

        MyBase m = m1;
        m.Func();//子类的方法
        Console.ReadKey();

     3、抽象方法实现

关于虚方法需要注意的几点:
1.父类中如果有方法需要让子类重写,则可以将该方法标记为virtual
2.虚方法在父类中必须有实现,哪怕是空实现。
3.虚方法子类可以重写(override),也可以不重写
关于抽象方法注意的几点:
1.需要用abstract关键字标记
2.抽象方法不能有任何方法实现。
3.抽象成员必须包含在抽象类中。
4.由于抽象成员没有任何实现,所以子类必须将抽象成员重写。
5.抽象类不能实例化,
抽象类的作用:抽象类的作用就是为了让子类继承。
6.抽象类中可以包括抽象成员,可以包括有具体代码的成员。
7. 还有抽象方法不能用static修饰

     4、接口实现

1.接口中只能包含方法(属性、事件、索引器也都是方法)
2.接口中的成员都不能有任何实现。
3.接口不能被实例化。
4.接口中的成员不能有任何访问修饰符。(默认为public)
5.实现接口的子类必须将接口中的所有成员全都实现。
6.子类实现接口的方法时,不需要任何关键字,直接实现即可。
7.接口存在的意义就是为了多态。

原文地址:https://www.cnblogs.com/poli/p/4365395.html