首页 > 访问级别约束0906

访问级别约束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/archive/2012/09/08/2676609.html

更多相关:

  • 来源:公众号|计算机视觉工坊(系投稿)作者:仲夏夜之星「3D视觉工坊」技术交流群已经成立,目前大约有12000人,方向主要涉及3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、...

  • 点云PCL免费知识星球,点云论文速读。文章:Real-Time LIDAR-Based Urban Road and Sidewalk Detection for Autonomous Vehicles作者:Ern˝o Horváth  , Claudiu Pozna ,and Miklós Unger编译:点云PCL代码:http...

  • 文章:Semantic Histogram Based Graph Matching for Real-Time Multi-Robot Global Localization in Large Scale Environment作者:Xiyue Guo, Junjie Hu, Junfeng Chen, Fuqin Deng, T...

  • 点云PCL免费知识星球,点云论文速读。文章:Robust Place Recognition using an Imaging Lidar作者:Tixiao Shan, Brendan Englot, Fabio Duarte, Carlo Ratti, and Daniela Rus编译:点云PCL(ICRA 2021)开源代码:...

  • 文章:A Survey of Calibration Methods for Optical See-Through Head-Mounted Displays作者:Jens Grubert , Yuta Itoh, Kenneth Moser编译:点云PCL本文仅做学术分享,如有侵权,请联系删除。欢迎各位加入免费知识星球,获取PD...

  • 针对高并发量的处理 一个老生常谈的话题了 至于需要运维支持的那些cdn、负载均衡神马的就不赘述了 你们都懂的 虫子在此博文只讲一些从程序角度出发的一些不错的解决方案。 至于从数据库角度的性能方案、虫子另开博文。 1. 首推静态化 推荐指数五颗星 满星五颗 只要是大型互联网应用基本上离不开这个概念,IIS自带的伪静态化不谈,但是想做好...

  • 本文概要: 1、首先给出结论是:除了几种特殊情况外,在读取实例变量的时候采用直接访问的形式,而在设置实例变量的时候通过属性来做。 2、讲解了使用getter、setter的好处。 3、列举了几种上面提到的特殊情况:有时不能使用setter、有时必须使用setter、有时必须使用getter。 注意:在对象之外访问实例变量时总是应该通过...

  • 一、前言                               avalon.js的影响力愈发强劲,而作为子模块之一的mmDeferred必然成为异步调用模式学习之旅的又一站呢!本文将记录我对mmDeferred的认识,若有纰漏请各位指正,谢谢。项目请见:mmDeferred@github   二、API说明          ...

  •     在网上看到的这道题,答案是3次。因此a和b[2]实例化三次对象,就调用了三次构造方法,而*p[2]只定义了指针,并未实例化对象,所以不调用构造方法。  转载于:https://blog.51cto.com/sydugu/1553403...