zoukankan      html  css  js  c++  java
  • C#修饰符讲解大全

    1.修饰符是什么?

      修饰符是用于限定类型以及类型成员的声明的一种符号。【百度百科】

    2.修饰符分类

      13种修饰符,按功能可分为三类:访问修饰符,类修饰符和成员修饰符.【百度百科】

      作 用:限定类型以及类型成员

      C#中的修饰符被用来定义类型和成员方法,.Net3.5共有下面十三种:

    修饰符

    说明

    abstract

    指定某个类为抽象类。

    const

    指定无法修改字段或局部变量的值,即被修饰为常量。

    event

    声明事件。

    extern

    指示某个方法在外部实现,一般在.Net程序调用外部Win32API时使用。

    new

    隐藏从基类成员继承的成员。

    override

    重写从基类成员继承的成员。

    partial

    在整个同一程序集中定义分部类和结构。可以简单理解为把同一个类分别写在不同的.cs文件中。

    readonly

    声明一个字段或是变量为只读,且只能在声明或是构造函数时给此字段、变量赋值。

    sealed

    指定被修饰的类无法被其它类继承。

    static

    指定一个静态字段、变量、类、方法。

    unsafe

    指定一段不安全代码,即在C#中使用指针。

    virtual

    修饰某个方法为虚方法,以便在其继承类中可重写此方法。一般与override和new搭配使用。

    volatile

    指示字段可由操作系统、硬件或并发执行线程等在程序中进行修改。volatile 关键字表示字段可能被多个并发执行线程修改。声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制。这样可以确保该字段在任何时间呈现的都是最新的值。

    3.详解修饰符

      (1)访问修饰符:

        ①访问修饰符就是类,属性和方法的定义分级制度 。

        ②4个访问修饰符(是添加到类、结构或成员声明的关键字)

          Public:公有的,是类型和类型成员的访问修饰符。对其访问没有限制。

          Internal:内部的,是类型和类型成员的访问修饰符。同一个程序集中的所有类都可以访问

          Private:私有的,是一个成员访问修饰符。只有在声明它们的类和结构中才可以访问。

          Protected::受保护的,是一个成员访问修饰符。只能在它的类和它的派生类中访问。

          protected internal:访问级别为 internal 或 protected。即,“同一个程序集中的所有类,以及所有程序集中的子类都可以访问

           一个成员或类型只能有一个访问修饰符,使用 protected internal组合时除外。

      (2)类修饰符:

        abstract:可以被指示一个类只能作为其它类的基类.

        sealed:指示一个类不能被继承.

        static:修饰类时表示该类是静态类,不能够实例化该类的对象,该类的成员为静态.

      (3)成员修饰符

        abstract:指示该方法或属性没有实现.

        const:指定域或局部变量的值不能被改动.

        event:声明一个事件.

        extern:指示方法在外部实现.

        override:对由基类继承成员的新实现.

        readonly:指示一个域只能在声明时以及相同类的内部被赋值.

        Partial:在整个同一程序集中定义分部类和结构

        Virtual:用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象

        New:作修饰符,隐藏从基类成员继承的成员,在不使用 new 修饰符的情况下隐藏成员是允许的,但会生成警告。作运算符,用于创建对象和调用构造函数。

    4.C#中方法、类等的默认访问修饰符

      接口(interface)

      接口成员访问修饰符默认为public,且不能显示使用访问修饰符。

      类(class)

      构造函数默认为public访问修饰符。

      析构函数不能显示使用访问修饰符且默认为private访问修饰符。

      类的成员默认访问修饰符为private;

      枚举(enum)

      枚举类型成员默认为public访问修饰符,且不能显示使用修饰符。

      结构(struct)

      结构成员默认为private修饰符。

      结构成员无法声明为protected成员,因为结构不支持继承。

      嵌套类型

      嵌套类型的默认访问修饰符为private。 和类,结构的成员默认访问类型一致

    5.Virtual,override和new 的区别 

    ①. virtual和override配套使用。在基类base中声明了虚方法method()并用virtual修饰,在子类derived中重写方法method()并用override修饰。那么当将子类的实例赋予基类的对象(不需要强制转换)时即BaseBclass= new Derived();Bclass.Method()是调用了子类的method()方法,而不是基类的。

    ②.new不需要和virtual配套使用。在基类base中声明了方法method(),在子类derived中声明了同名的方法method()并用new修饰。那么当将子类的实例赋予基类的对象时即BaseBclass= new Derived();Bclass.Method()是调用了基类类的method()方法,而不是子类的。

    ③.这说明,override可以覆盖基类的方法,让基类的方法以子类的内容实现,而new不用来覆盖基类的方法,而是全新定义一个子类的方法,这个方法只属于子类,与基类的方法无关,只是名字上相同而已.

     

    *注意:

    (1)程序集:经由编译器编译得到的,供CLR进一步编译执行的那个中间产物,在WINDOWS系统中,它一般表现为·dll或者是·exe的格式,但是要注意,它们跟普通意义上的WIN32可执行程序是完全不同的东西,程序集必须依靠CLR才能顺利执行。【百度百科】

      被编译到同一个dll或exe中的程序就是处于同一个程序集中,在不同的dll或exe文件中的程序就是处于不同的程序集中。

      net中的程序集就是一个编译器直接生成的dll或可执行的exe文件,包含程序集清单、元数据和MSIL等。是一个或者多个类型定义及资源文件的集合体。

      程序集(.net中exe与dll的区别就是exe有程序接入口,即Main函数)就是.net框架下,可以被CLR加载并运行的一堆数据集(类似java中的jar包,无法脱离虚拟机自己运行)。它们和之前   CC++生成的可执行程序和动态链接库有本质的区别。作为一堆数据集,程序集的数据可以分为:类型元数据,程序元数据,IL代码,资源。


    (2)元数据:元数据一般就是指描述自身的数据。
    (3)程序集元数据:包含程序集的版本信息,安全信息,签名等。
    (4)类型元数据:记录了程序集将引用了哪些类,用户自定义了哪些类,字段,数据类型等一系列信息(VS的编程助手靠的就是反射获取类型元数据)。
    (5)IL代码:MSIL,微软中间语言,微软跨语言的根基所在,所有的C#代码都编译成IL代码,保存在程序集中,在被CLR加载后,由JIT调用BCL,FTL即时编译成机器码来让CPU运行。

    *:以上为博主查阅大量资料总结得来,也是方便自己了解这块知识。如需转载,请标注来源,尊重劳动成果,谢谢!

  • 相关阅读:
    吃甘蔗(中等,模拟)
    jquery对象里面的context参数
    event对象的使用注意事项
    EcmaScript源码
    对js运算符“||”和“&&”的总结
    浏览器滚动条样式
    浏览器的重绘与重排
    input[checkbox],input[radiobox]的一些问题
    height:100%
    Sublime Text 3 多行游标
  • 原文地址:https://www.cnblogs.com/HenryWEI/p/9662275.html
Copyright © 2011-2022 走看看