c#的细节(二)-修饰符

写在最前面的话: 《c#的细节》是我当初学习c#时候,做的一些学习笔记的整理,现在回头看来这些都是非常浅显的知识,是c#非常细节的地方,同时也是不能忽略的地方,”细节决定成败“,也许有些严重。我希望把这些整理出来,可以给初学者一个参考,也给自己一个温故知新的机会。高手就不必花时间来看了。;-) ———————————————————————————————– 在c#的中修饰符的概念,最让初学者有些头痛了,理解起来也不是想象中那么简单,关键是不要搞乱了。

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 protected internal private protected internal

interface

public

struct

private

public internal private

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

打印println()方法的逻辑

782
来自专栏数据结构与算法

1750:全排列

1750:全排列 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 给定一个由不同的小写字母组成的字符串,输出这个字符串的所...

36914
来自专栏决胜机器学习

正则表达式学习笔记

正则表达式学习笔记 (原创内容,转载请注明来源,谢谢) 首先,学习正则表达式,很推荐一篇博客,http://www.cnblogs.com/deerchao...

35912
来自专栏Python

Python2和Python3的一些语法区别

Python2和Python3的一些语法区别 python 1.print 在版本2的使用方法是: print 'this is version 2 也可以是...

2238
来自专栏吴伟祥

Shell脚本学习总结(二) 流程控制 转

Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

712
来自专栏测试开发架构之路

C++之new/delete/malloc/free详解

主要内容: 1.  C语言中的函数malloc和free 2.  C++中的运算符new和delete 3.  new/delete与malloc/free之间...

3215
来自专栏博岩Java大讲堂

Java虚拟机--虚拟机内存区域Java虚拟机内存区域

2928
来自专栏java工会

JAVA 同步实现原理

Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:

520
来自专栏有趣的Python

慕课网-Linux C语言指针与内存-学习笔记

Linux C语言指针与内存 工具与原理 指针 数组 字符串 堆内存与栈内存 gdb内存调试工具。 C语言中指针的基本用法 #include <stdio.h>...

2834
来自专栏大闲人柴毛毛

深入Java虚拟机——JVM内存详解

在C++中,程序员拥有每一个对象的所有权,但与此同时还肩负着释放对象内存空间的责任;而Java由于有了虚拟机的帮助,程序员拥有对象的所有权的同时不再需要释放对象...

39012

扫码关注云+社区