c# 访问修饰符的访问权限

摘要:
1.访问修饰符、指定的声明类型和类型成员的可访问性。公共访问是允许的最高访问级别。在类声明中使用抽象修饰符来指示一个类只能是其他类的基类。同时使用抽象修饰符和外部修饰符来修改同一成员是错误的。允许在没有新修饰符的情况下隐藏成员,但会生成警告。在类声明中使用密封修饰符以防止继承此类11。静态:声明属于类型本身而不是特定对象的成员。
 1、访问修饰符
  指定声明的类型和类型成员的可访问性。

  (1)
public是类型和类型成员的访问修饰符。公共访问是允许的最高访问级别。对访问公共成员没有限制。
  (2)
private是一个成员访问修饰符。私有访问是允许的最低访问级别。私有成员只有在声明它们的类和结  构体中才是可访问的。
  (3)
internal是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的。
  
(4)protected是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。

2、abstract:指示某个类只能是其他类的基类。
可以和类、方法、属性、索引器及事件一起使用。在类声明中使用abstract修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。


3、const:指定无法修改字段或局部变量的值。

用于修改字段或局部变量的声明。它指定字段或局部变量的值是常数,不能被修改。


4、event:声明事件。

类和结构使用事件将出现的可能影响对象状态的事件通知给对象。


  5extern:指示在外部实现方法。

  用于声明在外部实现的方法。extern修饰符的常见用法是在使用Interop服务调入非托管代码时与DllImport属性一起使用;在这种情况下,该方法还必须声明为static

  extern关键字还可以定义外部程序集别名,使得可以从单个程序集中引用同一组件的不同版本。

abstractextern修饰符一起使用来修改同一成员是错误的。使用extern修饰符意味着方法在C#代码的外部实现,而使用abstract修饰符意味着在类中未提供方法实现。

  6new:从基类成员隐藏继承的成员。
  在用作修饰符时,new关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。在不使用 new修饰符的情况下隐藏成员是允许的,但会生成警告。使用 new显式隐藏成员会取消此警告,并记录代之以派生版本这一事实。

  若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并使用 new修饰符修饰该成员。

  对同一成员同时使用 new和override是错误的,因为这两个修饰符在含义上相互排斥。使用 new会用同样的名称创建一个新成员并使原始成员变为隐藏的,而 override则扩展继承成员的实现。

  在不隐藏继承成员的声明中使用 new修饰符将会生成警告。


7override:提供从基类继承的虚拟成员的新实现。

 要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用override修饰符。


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

分部类型定义允许将类、结构或接口的定义拆分到多个文件中。


9readonly:声明一个字段,该字段只能赋值为该声明的一部分或者在同一个类的构造函数中。

  是可以在字段上使用的修饰符。当字段声明包括readonly修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者出现在同一类的构造函数中。在此示例中,字段year的值无法在ChangeYear方法中更改,即使在类构造函数中给它赋了值。


10sealed:指定类不能被继承。

可以应用于类、实例方法和属性。密封类不能被继承。密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。当应用于方法或属性时,sealed修饰符必须始终与override一起使用。

在类声明中使用 sealed修饰符可防止继承此类


11static:声明属于类型本身而不是属于特定对象的成员。

声明属于类型本身而不是属于特定对象的静态成员。可用于类、字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型。


12unsafe:声明不安全的上下文。该上下文是任何涉及指针的操作所必需的。


13virtual:在派生类中声明其实现可由重写成员更改的方法或访问器。

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

调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。

默认情况下,方法是非虚拟的。不能重写非虚方法。

virtual修饰符不能与 staticabstractoverride修饰符一起使用。

除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。

·在静态属性上使用 virtual修饰符是错误的。
  ·通过包括使用 override修饰符的属性声明,可在派生类中重写虚拟继承属性。


14volatile:指示字段可由操作系统、硬件或并发执行线程等在程序中进行修改。

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

volatile修饰符通常用于由多个线程访问而不使用lock语句(C# 参考)语句对访问进行序列化的字段。

volatile关键字可应用于以下类型:

·引用类型。

·指针类型(在不安全的上下文中)。

·整型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。

·具有整数基类型的枚举类型。

·已知为引用类型的泛型类型参数。

·IntPtr和 UIntPtr。

所涉及的类型必须是类或结构的字段。不能将局部变量声明为 volatile

免责声明:文章转载自《c# 访问修饰符的访问权限》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇LP Token 价格计算推导及安全性Tarjan求割点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SurfaceView 透明和半透明

透明//Transparent   半透明//Translucent import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory;...

android实现3D Gallery 轮播效果,触摸时停止轮播

1、轮播控件涉及到的两个类 CarouselViewPager.java public class CarouselViewPager extends ViewPager { @IntDef({RESUME, PAUSE, DESTROY}) @Retention(RetentionPolicy.SOURCE) public @in...

android studio定时器

1.超时 CountDownTimer第一个参数超时时间,第二个参数多久执行一次onTick(), 到达设定的超时时间执行onFinsh(),cancel取消超时计数,start重新开始(从零开始)。 private CountDownTimer afterRunTimer=new CountDownTimer(2000,2000) {...

安卓中多线程间通信方式

背景安卓开发中多线程间通信是比较常见的操作,现对常用的几种方式先进行一波简单的总结。一、通过handler方式 Handler handler = new Handler() { @Override public void handleMessage(@NonNull Message msg) {...

mediaplayer与surfaceView,无法播放问题

mediaplayer需要在surfaceView创建之后才能创建,不然会导致错误。 1 surfaceholder =msurface.getHolder(); 2 surfaceholder.setKeepScreenOn(true); 3 surfaceholder.addCallback(new SurfaceV...

C# winform 中的Form 源码

1 [DefaultEvent("Load"), InitializationEvent("Load"), ComVisible(true), ClassInterface(ClassInterfaceType.AutoDispatch), ToolboxItemFilter("System.Windows.Forms.Control.TopLevel"...