C# 中的访问修饰符和声明修饰符

来源:互联网 发布:淘宝ok球鞋店如何 编辑:程序博客网 时间:2024/06/05 12:07
转载请注明出处!
  用了这么久C#,竟然还对一些修饰符傻傻分不清楚!!!!在此特地写一篇关于C#中各种修饰符的说明。
首先,简单说明一下4个访问修饰符(是添加到类、结构或成员声明的关键字)网上一大堆
Public:公有的,是类型和类型成员的访问修饰符。对其访问没有限制。
Internal:内部的,是类型和类型成员的访问修饰符。同一个程序集中的所有类都可以访问
Private:私有的,是一个成员访问修饰符。只有在声明它们的类和结构中才可以访问。
Protected:受保护的,是一个成员访问修饰符。只能在它的类和它的派生类中访问。
protected internal:访问级别为 internal 或 protected。即,“同一个程序集中的所有类,以及所有程序集中的子类都可以访问。
  注意:除了使用protected internal组合以外,一个成员或类型只能有一个访问修饰符。如果在成员声明中未指定访问修饰符,则使用默认的访问修饰(在此不特地说面,最好都要明确添加访问修饰符)。

接下来说明一下几个声明修饰符
Static:表示静态。当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在。就像入口函数Static void Main,因为它是静态函数,所以可以直接被调用。使用static关键字的类可以不用实例化而直接使用。
Abstract:表示抽象,指示所修饰的内容缺少实现或未完全实现。 abstract修饰符可用于类、方法、属性、索引器和事件。在类声明中使用abstract修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。抽象类主要是为了被继承,不能创建抽象类的实例。包含一个或多个抽象成员的类必定也是抽象的(抽象类)。
抽象函数不能有函数体,例如:public abstract void Hello() {} 的声明是错误的,应为public abstract voidHello();而在子类中进行对函数的具体实现。
Sealed:表示密封,可以应用于类、实例方法和属性。密封类不能被继承。密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。当应用于方法或属性时,sealed 修饰符必须始终与override一起使用。
Virtual:表示虚拟,表明这个成员可以在派生类中被重写。virtual可应用于方法,属性,索引器和事件。virtual方法不仅可以在派生类中重写,而且在所有的子类中都可以被重写。而非虚方法不能被重写。声明为virtual的方法被重写时,派生类中可以使用base关键字访问父类中的publid,protected成员。语法:base.member;但base关键字不能跳过类层次结构中的多个层次,子类不能访问祖父类的成员,base.base.member是非法的。
Override:表示重写,提供派生类对基类方法的新的实现,重写的方法必须和基类的方法有着相同的签名(函数名、返回值、参数列表相同)。override关键字不可以重写基类非virtual修饰的方法和static修饰的静态方法。派生类的override方法和基类的virtual方法必须有相同的访问权限。不能用修饰符new、static、virtual或者abstract修饰override方法。派生类的override方法重写的基类方法必须是virtual、abstract或者override的。
New:表示新的,c#中,new的关键字主要有三个功能:
  1、作为运算符用来创建类的一个对象。 Class obj = new Class();
  2、作为修饰符。
  3、用于在泛型声明中约束可能用作类型参数的参数类型。(这个不太清楚)
  在这里主要介绍第2个功能,作为修饰符的作用。new声明的方法,当使用子类的类型来调用的时候,它会运行子类的函数,而如果类型是基类的话,被隐藏的基类函数会被调用。而子类中函数使用override的时候,则当使用子类的类型来调用的是,它会运行子类的函数,类型是基类的时候,仍会调用子类函数。
0 0
原创粉丝点击