版权声明:本文为博主原创文章,未经博主允许不得转载。
-
- C#共有五种访问修饰符:public、private、protected、internal、protected internal。作用范围如下表:
访问修饰符 | 说明 |
public | 公有访问。不受任何限制。 |
private | 私有访问。只限于本类成员访问,子类,实例都不能访问。 |
protected | 保护访问。只限于本类和子类访问,实例不能访问。 |
internal | 内部访问。只限于本项目内访问,其他不能访问。 |
protected internal | 内部保护访问。只限于本项目或是子类访问,其他不能访问 |
C#成员类型的可修饰及默认修饰符如下表:
成员类型 | 默认修饰符 | 可被修饰符 |
enum | public | none |
class | private | public、protected、internal、private、 protected internal |
interface | public | none |
struct | private | public、internal、private |
下面我就结合实例,讲一下public、private、protected、internal和protected internal的作用范围。
如下代码:
1: using System;
2: using System.Collections.Generic;
3: using System.Text;
4:
5: namespace AccessModifier
6: {
7: public class AccessModifierClass
8: {
9: public string GetPublicString()
10: {
11: return "Public String";
12: }
13:
14: protected string GetProtectedString()
15: {
16: return "Protected String";
17: }
18:
19: private string GetPrivateString()
20: {
21: return "Private String";
22: }
23:
24: internal string GetInternalString()
25: {
26: return "Internal String";
27: }
28:
29: protected internal string GetProtectedInternalString()
30: {
31: return "Protected Internal String";
32: }
33:
34: void AvailableAccessModifier()
35: {
36: this.GetPublicString();
37: this.GetPrivateString();
38: this.GetInternalString();
39: this.GetProtectedInternalString();
40: this.GetProtectedString();
41: }
42: }
43:
44: public class TestAccessModifierClass1
45: {
46: void AvailableAccessModifier()
47: {
48: AccessModifierClass item = new AccessModifierClass();
49: item.GetPublicString();
50: item.GetInternalString();
51: item.GetProtectedInternalString();
52: }
53: }
54:
55: public class TestAccessModifierClass2 : AccessModifierClass
56: {
57: void AvailableAccessModifier()
58: {
59: AccessModifierClass item = new AccessModifierClass();
60: item.GetPublicString();
61: item.GetInternalString();
62: item.GetProtectedInternalString();
63: base.GetProtectedString();
64: }
65: }
66: }
AccessModifierClass是我们的访问修饰符类,里面有五种访问修饰符方法,可见在AccessModifierClass类里面的AvailableAccessModifier()方法可以访问所有的方法。
在TestAccessModifierClass1类中的AvailableAccessModifier()方法只能访问public、Internal和Protected Internal方法。
TestAccessModifierClass2类继承自AccessModifierClass类,所以它的AvailableAccessModifier()方法可以访问public,internal,protected和protected internal方法。
在新建一个工程,且引用AccessModifierClass类的dll,代码如下:
1: using System;
2: using System.Collections.Generic;
3: using System.Text;
4: using AccessModifier;
5:
6: namespace AccessModifierApp
7: {
8: public class AccessModifierAppClass1
9: {
10: void AvailableAccessModifier()
11: {
12: AccessModifierClass item = new AccessModifierClass();
13: item.GetPublicString();
14: }
15: }
16:
17: public class AccessModifierAppClass2 : AccessModifierClass
18: {
19: void AvailableAccessModifier()
20: {
21: AccessModifierClass item = new AccessModifierClass();
22: item.GetPublicString();
23: base.GetProtectedString();
24: base.GetProtectedInternalString();
25: }
26: }
27: }
AccessModifierAppClass1类的AvailableAccessModifier()方法只能访问public方法。
AccessModifierAppClass2类继承自AccessModifierClass类,所它的AvailableAccessModifier()方法可以访问public、protected和protected internal方法。
-
顶
- 2
-
踩
- 0
我的同类文章
- •How to resolve Time_Wait issue when you use TcpListener and TcpClient2011-10-14
- •C#使用Create创建文件后,报The Process cannot access the file because it is being used by another process的异常2010-09-27
- •设计模式---建造者模式2009-12-31
- •SQL Server CLR全功略之五---CLR自定义数据类型2009-11-13
- •SQL Server CLR全功略之三---CLR标量函数、表值函数和聚合函数(UDA)2009-11-10
- •如何使用C#播放背景音乐2009-08-06
- •C#中如何使用访问修饰符来修饰属性2010-10-07
- •迟到的Top语句2010-06-04
- •C#读取和写入配置文件2009-12-03
- •SQL Server CLR全功略之四---CLR触发器2009-11-10
- •SQL Server CLR全功略之二---CLR存储过程2009-10-26
参考知识库
- C#开发微信订阅号、服务号视频教程
- .NET平台和C#编程从入门到精通
- 使用C#开发信息管理系统
- 疯狂的 C#——快速入门
-
征服JavaScript高级程序设计与应用实例视频课程
- linux c 编程模板总结一
- JAVA面试总结
- java面试宝典
- Java面试题全集上
- Java面试题全集上
16楼 12期一刘超 2016-03-29 20:01发表 [回复] [引用] [举报]-
-
总结的很详细,感谢分享。
15楼 chaojidayuanzi 2016-01-30 23:49发表 [回复] [引用] [举报]-
-
没有说sealed 差评
14楼 L545266193 2015-11-04 15:35发表 [回复] [引用] [举报]-
-
第一次看到我看得懂的东西,真是详细又实用,谢谢!
13楼 ysvae 2015-07-20 10:00发表 [回复] [引用] [举报]-
-
楼主,你这里有很明显的错误吧。在命名空间中定义的元素无法显式地声明为 private、protected 或 protected internal ,也就是说外部类只能声明为 public 或者 internal,而且默认是 internal,内部类默认修饰符才是private。
12楼 yuxinsuoxiang 2015-01-13 13:12发表 [回复] [引用] [举报]-
-
嗯
11楼 twticpgk 2013-05-22 20:03发表 [回复] [引用] [举报]-
-
非常感谢!非常形象!
10楼 haoxingfeng 2011-09-08 11:16发表 [回复] [引用] [举报]-
-
好东西,学习了。!
9楼 懒虫虫 2010-02-03 18:37发表 [回复] [引用] [举报]-
-
基础,多多学习!
Re: 灰太狼 2010-02-03 23:15发表 [回复] [引用] [举报]-
-
回复懒虫虫:共同学习[e04]
8楼 灰太狼 2009-07-06 09:18发表 [回复] [引用] [举报]-
-
没错。同一项目内的其他类都可以访问internal方法。详见blog中的示例1。
7楼 Speed_Michael 2009-07-02 09:56发表 [回复] [引用] [举报]-
-
都是些基础
6楼 HandG 2009-07-02 08:12发表 [回复] [引用] [举报]-
-
st
5楼 jikezhang88 2009-06-30 15:22发表 [回复] [引用] [举报]-
-
goood
4楼 xylhx 2009-06-29 10:33发表 [回复] [引用] [举报]-
-
菜,还是帮忙顶了
3楼 wanhahahahaha 2009-06-25 14:41发表 [回复] [引用] [举报]-
-
good
2楼 灰太狼 2009-06-25 09:30发表 [回复] [引用] [举报]-
-
谢谢。你说得对,我会添加上的。
1楼 book_customsyuan 2009-06-25 01:37发表 [回复] [引用] [举报]-
-
基础呀:)
这其中可以考虑添加以下property、Class、Function的default上对应的修饰就会更好用了:)