C#学习之修饰符

修饰符作用:


修饰符用于限定类型以及类型成员的申明。

C#中修饰符种类:

C#中有13种修饰符 ,按功能可分为三部分:存取修饰符,类修饰符和成员修饰符 .

存取修饰符:
public:存取访问不受限制 .
private:只有包含该成员的类可以存取.当前类才能访问
internal:只有当前工程可以存取.只限于类所在的命名空间 (不包括子类)
protected:只有包含该成员的类以及继承的类可以存取 .


类修饰符:
abstract:抽象类,可以被指示一个类只能作为其它类的基类.必须被继承和重写的
sealed:密封类,指示一个类不能被继承 .防止该类被其它类继承

partial: 部分类,可以将一个类、结构或接口的定义拆分到两个或多个源文件中,最终编译时将合并成一个文件 ,且各个部分不能分散在不同程序集中。

成员修饰符:

abstract:指示该方法或属性没有实现.只能在抽象类中声明
const:指定域或局部变量的值不能被改动 .

event:声明一个事件.
extern:指示方法在外部实现 .
override:对由基类继承成员的新实现.
readonly:指示一个域只能在声明时以及相同类的内部被赋值.
static:指示一个成员属于类型本身 ,而不是属于特定的对象.
virtual:指示一个方法或存取器的实现可以在继承类中被覆盖 .

静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象 标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。

静态类型属于类
非静态属于对象

用static关键字符标识的程序元素是静态的,不用static标识的程序元素是非静态.两者的区别 在于:静态的东西是在类型加载初始时初始化的,并且与类相关.非静态东西一般放在实例的构造函数中初始化,它是与特定类的实例相关的.

抽象方法与虚方法的区别
1.abstract方法只能在抽象类中声明,virtual则不是。
2.abstract方法必须在派生类中重写,而virtual则不必
3.abstract方法不能声明方法实体,
   abstract public void SD();
   虚方法则可以
   public virtual void sdf()
   {
      Console.WriteLine("A");
   }
4.虚方法可以实现多态,而抽象方法不可以。

修饰符使用注意事项:

1、同时对一个类作abstract和sealed的修饰是没有意义的,也是被禁止的。

2、 当一个类或方法没有被任何修饰符修饰时,默认为internal。

3、const和Readonly的区别:const在编译时必须能够明确知道该字段的值,其值是硬编码到程序中去的,修改了该类型成员后需要重新编译才能使修改生效。而readonly是运行时 只读,内容在运行时确定,所以修改了readonly类型成员后无需重新编译即可生效。Readonly不能修饰局部变量,const可以。

Sealed:修饰类时表示该类不能够被继承,修饰方法时表示该方法不能被覆写。

Static:修饰类时表示该类时静态类,不能够实例化该类的对象,既然不能实例化该类,那么这个类也就不能够含有对象成员,即该类所有成员为静 态;修饰类成员时,该成员为类成员,只能通过【类.成员名】的方式访问

当static修饰构造函数时,构造函数不能含有任何参数,不能含有修饰符,构造函数不能对对象成员进行初始化操作。但是能够对静态成员进行初始化 或者调用。不能保证他在什么时候执行,却能保证在第一次使用类型前执行。在静态构造函数中初始化的静态成员为最终初始化结果。

Virtual:修饰方法成员,表示虚方法。父类可以含有该类的实现,子类可以覆写该函数。

下面是C#中修饰符的具体意义:

修饰符
应用于
说明
public
所有的类型或成员
任何代码 均可以访问该成员
protected
类型和内嵌类型(即在一个类中定义的类)的所有成员
只有派生的类型 能访问该成员
internal
类型和内嵌类型的所有成员
只能在包含它的程序集 中访问该成员
private
所有的类型或成员
只能在它所属的类型 中访问该成员
protected internal
类型和内嵌类型的所有成员
能在包含它的程序集 派生类型 中访问该成员
 
 
 
new
函数成员
成员用相同的签名隐藏继承的成员
static
所有的成员
成员不在类的具体实例中执行
virtual
仅函数成员
成员可以由派生类重写
abstract
类和函数成员
抽象成员定义了成员的签名,但没有提供实现代码
override
仅函数成员
成员重写了继承的虚拟或抽象成员
sealed
成员重写了继承的虚拟成员,但继承该类的任何类都不能重写该成员。必须与 override 一 起使用
extern
仅静态[DllImport]方法
成员在外部用另一种语言实现
作者:Angelo Lee
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
原文地址:https://www.cnblogs.com/yefengmeander/p/2887760.html