一 类的修饰符: 
C#中类的默认修饰符是internal。
1 private 只有对包.NET中的应用程序或库才能访问。
2 public 不限制对类的访问。 
3 protected 只可以被本类和其继承子类访问;

4 internal 只可以被本集合(Assembly)内所有的类存取。集合是C#语言中类被组合后的逻辑单位和物理单位,其编译后的文件扩展名往往 是“.DLL”或“.EXE”。 仅为同项目(这里的项目是只单独的项目,而不是整个解决方案)调用。

5 protected internal 唯一的一种组合限制修饰符,它只可以被本集合体内所有的类和这些类的继承子类所存取。(注意:提供的不是internal且protected访问方式)

6 abstract 抽象类,表示该类只能作为父类被用于继承,而不能进行对象实例化。抽象类可以包含抽象的成员,但这并非必须。abstract不能和new同时用。

7 sealed 密封类,阻止该类被继承。同时对一个类作abstract和sealed的修饰是没有意义的,也是被禁止的。

8 new 修饰符只能用于嵌套的类,表示隐藏了由基类继承来的、与基类中同名的成员和方法。

注:如果不是嵌套的类,命名空间或编译单元内的类只有public和internal两种修饰。

二 成员访问修饰符
类成员和结构成员的默认访问修饰符是private。 
1 private 私有类型成员只能从定义它的类型中访问。类成员和结构成员缺省时为私有。
2 public  公有类型或类型成员能从程序的任何地方访问。
3 protected 受保护类成员只可以被本类和其继承子类访问。(?在外部集合是否可以访问?)

4 internal 内部受保护类成员只可以被定义它的所在集合(Assembly)内所有的类存取。集合是C#语言中类被组合后的逻辑单位和物理单位,其编译后的文件扩展名 往往是“.DLL”或“.EXE”。 仅为同项目调用(这里的项目是指单独的项目,而不是整个解决方案)。

5 internal protected 唯一的一种组合限制修饰符,它只可以被本集合体内所有的类和这些类的继承子类所存取。(注意:提供的不是internal且protected访问方式) 
  
6 override用于成员函数,说明本函数覆盖父类中的同名函数。调用时系统会在整个继承结构中找到最具体的类并执行此最具体类中的函数,不管当时的对象是保存在哪一个层次的类对象中。这是错的,调用时会找到本对象类型之前最后被定义的那个函数。

7 new 用于成员函数,说明本函数隐藏父类中的同名函数。从此之后本函数不再处于父类同名函数的继承结构体系中,就如同在本类中定义了一个全新的不同名函数一样。

8 virtual 虚方法 用于成员函数,说明本函数可以在子类中被改写,也可以被隐藏,如果子类中没有重定义该函数,那就使用父类的函数体。除了静态方法外,非静态属性和非静态索引器也能声明为virtual。其他的函数成员不能声明为virtual,因而也不能被覆盖。(注意:一个虚方法不能为私有)

abstract:抽象方法(C++中的纯虚函数)必须定义在抽象类中,但抽象类不一定要有抽象方法。一个abstract函数总是一个virtual函数。
其实这也很好理解,抽象方法只有声明不能有定义,含有抽象方法的类如果可以被实例化无法保证抽象方法的行为,所以必须阻止其实例化。同时抽象方法的意义也就在于在子类中定以实现多态,所以抽象方法必须放在抽象类中,抽象类不可以被实例化。
 
定义virtual方法后子类同名方法自动为虚方法,不写virtual也是。
9 extern 修饰符用于声明在外部实现的方法。

extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 特性一起使用(调用DDL等)。在这种情况下,还必须将方法声明为 static,如下示例所示:

[DllImport("avifil32.dll")]

private static extern void AVIFileInit();

10 const 关键字声明的成员叫常量,在应用程序生命期中保持不变的域。必须在编译期初赋值,可以默认。

常量缺省都是静态的(static),而且编译器禁止static const这种写法。

11 readonly用于类成员变量,该变量可以在构造函数内被初始化(只此一次修改机会),从此之后就不可再被修改。readonly可以用static修饰。

12 static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化。所以我个人认为readonly只是一个在构造函数初始化,之后不可以修改的特殊变量。它与常量是两回事。

13 static 适用于类成员函数和成员变量,说明本成员是一个类级别的成员,所有对象共享此成员,可以通过类名来访问。

14 event事件成员,用以触发某个事件。

 
15 volatile是变量修饰符。一个变量经volatile修饰后在所有线程中必须是同步的;任何线程中改变了它的值,所有其他线程立即获取到了相同的值。

注意:不管访问修饰符是什么,基类的构造函数和析构函数永远也不能被派生类继承。
派生类不能继承基类的构造函数,但可以通过派生类构造函数中的构造函数初始化器调用它们。编译器自动在没有显式定义构造函数初始化器的派生类的构造函数上附加构造函数初始化器(调用缺省的基类构造函数)。

附加:
1下面是抽象类用法的伪码: 
abstract class A 

  public abstract void F(); 

abstract class B: A 

  public void G() {} 

class C: B 

  public override void F() 
  { 
    //方法F的实现 
  } 

抽象类A内含一个抽象方法F(),它不能被实例化。类B继承自类A,其内包含了一个实例方法G(),但并没有实现抽象方法F(),所以仍然必须声明为抽象类。类C继承自类B,实现类抽象方法F(),于是可以进行对象实例化。

2在C#中有一个规定:编译器不允许派生类的可访问性比其基类更高。也就是说,内部类可以继承于一个公共类,但公共类不能继承于一个内部类。

合法的:内部类继承公共类
  public class MyBase
  {
  //class members
  }
  internal class MyClass : MyBase
  {
  //class members
  }
  不合法的:公共类继承内部类(编译器会说可访问性不一致)
  internal class MyBase
  {
  //class members
  }
  public class MyClass : MyBase
  {
  //class members
  }

  合法的
 
from: https://www.cnblogs.com/TonyZhao/p/3481707.html

【.Net】 C#访问修饰符的更多相关文章

  1. C#基础回顾(一)—C#访问修饰符

    一.写在前面的话 好久没有停下来总结自己,转眼间15年过去好些天,回首过去的日子,亦或失去,亦或所得!生活的节奏,常常让我们带着急急忙忙的节奏去追赶,也许这并不是每个人所期望的生活方式!于他人,于自己 ...

  2. C#基础知识八之访问修饰符

    1.  类的访问修饰符 修饰符 访问权限 无或者internal 只能在同一个程序集中访问类 public 同一个程序集或引用该程序集的外部都可访问类 abstract或internal abstra ...

  3. java访问修饰符

    了解面向对象思想的同学们,都知道"封装"这一基本特征,如何正确运用访问修饰符,恰恰能体现出封装的好坏. java访问修饰符有四个: 1)public:访问权限最高,其修饰的类.类变 ...

  4. Scala访问修饰符(四)

    Scala 访问修饰符基本和Java的一样,分别有:private,protected,public. 如果没有指定访问修饰符符,默认情况下,Scala对象的访问级别都是 public. Scala ...

  5. .NET 基础 一步步 一幕幕 [注释、命名规则、访问修饰符、数据类型、常量、变量]

    注释.命名规则.访问修饰符.数据类型.常量.变量 话说一个不会写注释的程序猿的不是一个好吃货,我们本篇就从注释开始说起好了. 在C#中有三种注释: 第一种:单行注释  以//开头,后面的就是注释内容 ...

  6. java中的访问修饰符

    Java有四种访问权限,其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符.其中package代表缺省的访问权限,具体到代码中就是不写任何修饰符的 ...

  7. 类的高级:访问修饰符、封装、静态类成员static、内部类;

    访问修饰符: 公开访问(public):对所有子类,非子类访问: 受保护的(protected):只有同包子类.非子类.不同包子类可访问,不同包非子类不可访问: 私有的(private):只有本类可访 ...

  8. 简单的描述Java中的构造函数,及访问修饰符

    作为一个Java 初学者,对Java的理解可能有些片面,甚至有些错误的理解,对于观看此处的您,希望您选择性观看!!! 访问修饰符: 1.常用访问修饰符: public 共有的 private 私有的 ...

  9. Swift开发小技巧--private访问修饰符报错的情况

    1.Swift中的访问修饰符(三个,作用:用来修饰属性,方法和类) public : 最大权限 -- 可以在当前framework和其他framework中访问 internal : 默认的权限 -- ...

  10. 面向对象php基本格式、构造、析构、访问修饰符

    <?php//面向对象//1.类//由众多的对象抽象出来的 //2.对象//一切皆对象//由类实例化出来的 //基本形式class 类名{ 成员变量 成员方法 } $对象名 =new 类名 $对 ...

随机推荐

  1. video.js视频播放器

    免费视频播放器videojs中文教程 Video.js是一款web视频播放器,支持html5和flash两种播放方式.更多关于video.js的介绍,可以访问官方网站介绍,我之前也写过一篇关于vide ...

  2. 【深入Struts2】获取ServletAPI的三种方式

    一:获取servletAPI的三种方法 在传统的Web开发中,经常会用到Servlet API中的HttpServletRequest.HttpSession和ServletContext.Strut ...

  3. HDU - 1525

    题意:给你两个数,a,b,有两个人轮流进行一次操作, 每次操作可以将大的数减去k倍的小的数,最后不能操作的人输了,问你谁赢了. 思路:我们可以用辗转相除法求出对于每一个状态可以改变几次,这样问题就变成 ...

  4. 7-10Editing aBook uva11212(迭代加深搜索 IDA*)

    题意:  给出n( 2<=n<=9) 个乱序的数组  要求拍成升序  每次 剪切一段加上粘贴一段算一次  拍成1 2 3 4 ...n即可     求排序次数 典型的状态空间搜索问题   ...

  5. QT5 QSS

    设计Qt程序Ui的时候,可以像WEB端使用CSS一样,使用QSS,使页面美化跟代码层分开,利于维护. 过程如下: 1.建立文本文件,写入样式表内容,更改文件后缀名为qss: 2.在工程中新建资源文件* ...

  6. 应用Mongoose开发MongoDB(1)数据库连接

    最近因为项目,接触了MongoDB,因为是分工合作,我负责的部分主要是实现前端对数据库增删查改的需求,因此以下内容只着重于针对不同问题如何进行解决. 整个工程的最终目的是通过mongoose编写数据库 ...

  7. 【BZOJ 4059】 (分治暴力|扫描线+线段树)

    4059: [Cerc2012]Non-boring sequences Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 632  Solved: 22 ...

  8. codevs 2291 糖果堆

    题目描述 Description [Shadow 1]第一题 WJMZBMR买了很多糖果,分成了N堆,排成一列.WJMZBMR说,如果Shadow能迅速求出第L堆到第R堆一共有多少糖果,就把这些糖果都 ...

  9. SPOJ11414 COT3 博弈论 + Trie树合并

    考虑对于每个子树从下往上依次考虑 对于叶子节点而言,如果可以染色,那么其\(sg\)值为\(1\),否则为\(0\) 考虑往上合并 如果选择了\(x\),那么后继状态就是其所有子树 如果选了其他子树中 ...

  10. 20172308《Java软件结构与数据结构》第一周学习总结

    教材学习内容总结 第 1 章 概述 软件质量的特征:正确性.可靠性.健壮性.可用性.可维护性.可重用性(别人写的组件自己可以拿过来用).可移植性.运行效率 数据结构:计算机存储.组织数据的方式 程序 ...