c#的修饰符大概分3类:
1、访问型修饰符,就是控制所修饰成员的可访问域,包括:public、private、protected、internal 和protected internal。其中只能protected internal 组合,其他都不能。
public:访问不受限制。
private:访问仅限于包含类型。只有包含该成员的类可以存取.
protected:访问仅限于包含类或从包含类派生的类型。只有包含该成员的类以及继承的类可以存取.
Internal:访问仅限于当前程序集。只有当前项目(工程)可以存取.
protected internal:访问仅限于当前程序集或从包含类派生的类型。
上面的概念好像很绕口。不过在如果你对面向对象大致了解的话,理解这些概念并不难,需要明确两个东东:程序集和项目。这里不详细讨论程序集和项目(如果你想全面了解有关程序集,项目,命名空间等东东,可以去看看这里),你可以大致理解,一个项目可以是一个程序集。
public、private、proteced我觉得非常比较好理解,麻烦点就是Internal,只能在一个项目中使用,不能跨项目调用,只能自己的项目内使用,即使是子类也不能访问。
namespace space1 { internal class Class1 { public int a } class Class2 { public void b() { Class1 cc = new Class1(); } } } namespace space2 { class App { static void Main(string[] args) { space1.Class1 t_xA = new space1.Class1();//error} } }
以上的代码表明,Internal 是不能跨项目访问的。
对于protected internal 简单些理解,就是protected 和internal 的并集。protected就只能被子类内部所访问,于是它们的并集就是:同一个项目内或者子类内部可以访问。如果既不是同一程序集也不是子类,就无法访问。如下面的代码所示:
namespace space3 { public class Class1 { internal protected int a; internal int b; protected int c; } public class class2 { public void bbb() { Class1 t_x1=new Class1(); t_x1.a //ok t_x1.b //ok t_x1.b //error } } public class class3:Class1 { public void bbb() { base.a...//ok base.b...//ok base.c ...//ok } } } namespace space4 { class Application1:space3.Class1 { public void a() { base.aa... base.cc... } } class bbb { public void ccc() { space3..Class2 d = new space3.Class2(); d.a.. //error d.b...//error d.c... //error } } }
2、类修饰符:
abstract:标识一个类只能作为其它类的基类.
sealed:标识一个类不能被继承.
partial :局部类。将你的 class 分为多个部分,编译器会将多个部分拼合在一起。关于局部类部分你可以看看这里
3、成员修饰符:
abstract:指示该方法或属性没有实现.
const:指定域或局部变量的值不能被改动.
event:声明一个事件.
extern:指示方法在外部实现.
override:对由基类继承成员的新实现.
readonly:指示一个域只能在声明时以及相同类的内部被赋值.
static:指示一个成员属于类型本身,而不是属于特定的对象.
virtual:指示一个方法或存取器的实现可以在继承类中被覆盖.
注意:1、命名空间不能使用访问修饰符。对命名空间没有访问是不受限制的,它的引入是主要是避免相同对象名的冲突。
2、如果在成员声明中未指定访问修饰符,则使用默认的可访问性。
属于 | 默认的成员可访问性 | 该成员允许的声明的可访问性 |
enum | public | 无 |
class | private | public
internal private
|
| public | 无 |
struct | private | public internal private |
声明:本文转载自http://www.watch-life.net/csharp/csharp-detail-modifiers.html