zoukankan      html  css  js  c++  java
  • 访问级别约束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();
                }
  • 相关阅读:
    Android 数据库SQLite的使用简单Demo
    jQuery插件FullCalendar日程表
    Activiti工作流访问路径资源注册和管理
    电子商务中的数据仓库技术
    打开”我的电脑”慢的解决办法
    数据结构定义中的中(大陆地区)美差异
    Wubi离线安装Ubuntu
    C++如何获得U盘的盘符以及U盘相关属性的代码
    浮动引起的文本重影
    定位相关的怪异问题
  • 原文地址:https://www.cnblogs.com/liuzhiye/p/2676609.html
Copyright © 2011-2022 走看看