访问级别约束0906

1 访问级别约束
    子类访问级别不能比父类高 儿子能去的地方老子一定能去
    方法、属性等暴露的返回值、参数的数据类型不能比方法、属性或者所在类的可访问级别低,因为这些方法、属性要能在高级场合出现,如果用到的类型却不能在这个场合出现就明显不合理了(可访问性不一致错误)
 
2 internal 修饰的类只能在当前程序集中被访问
 
3 静态成员 与 实例成员
    静态方法调用的属性字段也必须是静态的
 
    静态方法调用 类名.方法
    实例方法只能实例化之后调用 并且也没法调用静态方法
    静态方法里面不能直接调用实例成员
    实例方法中可以调用静态方法
 
静态成员属于类所有,非静态成员属于类的实例所有
C#静态方法属于类所有,类实例化前即可使用
在实例方法中可以直接调用静态方法,
在静态方法中不可以直接调用实例方法
静态方法和静态变量创建后始终使用同一块内存(静态存储区),而使用实例的方式会创建多个内存
class Student
    {
        private static string name;

        public static string Name
        {
            get { return name; }
            set { name = value; }
        }
        //静态方法
        public static void SayHi()
        {
            //静态方法里面不能直接调用实例成员
            Console.WriteLine("我是"+name);
        }
        //实例方法
        public void Test()
        {
            //实例方法中可以调用静态方法
            SayHi();
        }
    }
static void Main(string[] args)
        {
            //静态方法调用 类名.方法
            Student.SayHi();
            //实例方法只能实例化之后调用 并且也没法调用静态方法
            Student stu = new Student();
            stu.Test();

        }
 
4 多态:不同的对象调用同一个方法 做出的行为是不一样
     多态就是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征
 

    多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

 

    里氏替换原则: 父类引用指向子类的对象 父类对象不能够替换子类
    关键字 is  as

            //里氏替换原则: 父类引用指向子类的对象 父类对象不能够替换子类

            //让父类引用指向子类对象
           
            Person p2 = new Student("张三", 13, "男");//一个学生是一个人
            if (p2 is Student)//判断p2是否为student类型
            {
                Console.WriteLine("学生");
            }

            Student s = p2 as Student;//as 类型转换 只能转换引用类型 将p2转换为student类型


           
            Person p3 = new Teacher("张三", 13, "男");
            Student s2 = p3 as Student;//这样转换会出错 因为P3是基于teacher类型 s2会为null
            if (s2!=null)//防止报错
            {
                s2.SayHello();
            }
原文地址:https://www.cnblogs.com/liuzhiye/p/2676609.html