里氏转换

里氏转换
子类可以赋值给父类
如果父类中装的是子类,可以将父类转换成子类
可以使用关键字as/is转换

    class Program
    {
        static void Main(string[] args)
        {
            //子类赋值给父类
            Person p = new Student();
            //父类中装的是子类,可以将父类转换成子类
            Student s = (Student)p;
            //使用as关键字转换 转换是被返回null
            Teacher t = p as Teacher;
            //使用关键字is转换
            if (p is Teacher)
            {
                Console.WriteLine("转换成功");
            }
            else
            {
                Console.WriteLine("转换失败");
            }

        }
    }

 public class Person
    {
        public string Name
        {
            get;
            set;
        }
    }

父类Person

    public class Student : Person
    {
        public int ID
        {
            get;
            set;
        }
    }

子类Student

    public class Teacher:Person
    {
        public double Salary
        {
            get;
            set;
        }
    }

子类Teacher

时间: 2024-10-07 01:57:52

里氏转换的相关文章

20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)

1:C#中的访问修饰符 public: 公共成员,完全公开,没有访问限制. private: 私有的,只能在当前类的内部访问. protected: 受保护的,只能在当前类的内部以及该类的子类中访问. internal: 只能在当前项目中访问,在同一个项目中,internal和public的权限是一样的. protected internal: protected + internal权限. 1.1:能够修饰类的访问修饰符只有两个: public / internal 1.2:接口中的成员不允许

.Net学习笔记----2015-06-23(继承(里氏转换))

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; /*里氏转换 * 1,子类可以赋值给父类:如果一个地方需要一个父类作为参数,可以给一个子类代替 * 2,如果父类中装的是子类对象,那么可以将这个父类对象强制转换成子类对象 * * 子类对象可以调用父类中的成员,但是父类对象只能调用自己的成员 * **/ namespa

面向对象--里氏转换练习

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace winformjicheng{ class Program { static void Main(string[] args) { student stu = new student("张飞", "001", "男&

里氏转换,arraylist,path,file

1.里氏转换1).子类可以赋值给父类2).如果父类中装的是子类对象,那么可以将这个父类强转为子类对象. 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace _03里氏转换练习 8 { 9 class Program 10 { 11 static void Main(str

.Net学习 第2季04 C#面向对象 里氏转换 随机数 protected

.Net 视频学习第2季 C#面向对象 面向对象 里氏转换 随机数 protected 里氏转换:子类对象可以赋值给父类对象:如果父类中装的是子类对象,可以将此父类对象强制转换成子类对象. 子类对象可以调用父类成员,但父类对象永远只能调用自己的成员. is或者as均表示类型转换,is返回true/false,as返回转换后对象/null class Person { public string Name {get;set;} } class Student:Person { } class Te

.Net学习笔记----2015-07-21(C#基础复习05,里氏转换)

里氏转换: 1.子类可以赋值给父类 2.如果父类中装的是子类对象,那么可以将父类转换为子类对象. 3.as 4.is 如果一个子类继承了一个父类,那么这个子类除了可以使用自己的成员外,还可以使用从父类那里继承过来的成员 但是,父类永远只能使用自己的成员,而不能使用子类的成员 子类之间也不能互相使用对方的成员 class Program { static void Main(string[] args) { Person person = new Student(); Teacher t = pe

c#中的里氏转换和Java中强制类型转换在多态中的应用

在c#中: 注意: 子类并没有继承父类的构造函数,而是会默认调用父类那个无参数的构造函数. 如果一个子类继承了一个父类,那么这个子类除了可以使用自己的成员外,还可以使用从父类那里继承过来的成员.但是父类永远都只能使用自己的成员,而不能使用子类的成员. 子类之间也不能互相使用对方的成员. 里氏转换的概念: 1).子类可以赋值给父类 2).如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象. namespace 里氏转换_接口练习 { class Program { static void

C#中的里氏替换原则

里氏转换原则 子类可以赋值给父类对象 父类对象可以强制转化为对应的子类对象 里氏替换原则直观理解就是"子类是父类",反过来就说不通了. 就像男人是人对的,但人是男人就不对了. 这样明白了吧. 在面向对象思想中可知,派生类拥有基类向下公开的所有特征,它是基类的一个特例. 当派生类对象赋于基类类型时,将出现以下情况:派生类的数据结构依次对应于基类的数据结构.而派生类拥有的自己的数据将不可见. 当基类的对象试图转换为派生类型时,将出现基类对象的数据无法依次填充完派生类的所有数据结构.这就造成

01.里氏准换与using关键字

using关键字有什么用?什么是IDisposable? using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后会自动调用该对象的Dispose方法,释放资源.加分的补充回答:using其实等价于try--finally,用起来更方便. 里氏转换 (1).子类可以赋值给父类 (2).如果父类中装的是子类对象,那么可以将这个父类强制转换为子类对象. 得出结论:子类对象可以调用父类的成员,但是父类只能调用自己的成