当前位置: 移动技术网 > IT编程>开发语言>.net > C#修饰符讲解大全

C#修饰符讲解大全

2018年09月18日  | 移动技术网IT编程  | 我要评论

九天音乐网站,香辣小鱼仔,深圳银轩酒店

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包,无法脱离虚拟机自己运行)。它们和之前   c\c++生成的可执行程序和动态链接库有本质的区别。作为一堆数据集,程序集的数据可以分为:类型元数据,程序元数据,il代码,资源。


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

 

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网