A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋健 中级黑马   /  2013-3-12 12:34  /  2076 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 宋健 于 2013-3-12 23:01 编辑

public,private,internal,protected,interna protected五个访问修饰符,
请问它们的访问级别是怎样排序的,特别是internal和protected可以比较吗?哪个级别高?

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

7 个回复

正序浏览
Private:    私有访问修饰符,只能在当前类的内部来访问。
Protected:  在当前类的内部,以及所有当前类的子类内部。
Internal:    只能在当前程序集内部(一个项目)来访问
Protected  internal:同项目或其子类
Public:      在任何地方都可以访问。

Protected与internal没有可比性。Protected是在当前类内部与所有子类内部可访问,而internal是在同一个程序集中可访问。假如不在同一个程序集中,但依然存在继承关系,那么protected访问修饰符修饰类型依然可以访问。
回复 使用道具 举报
张文 中级黑马 2013-3-12 18:56:38
7#
大学考试经常考这个
回复 使用道具 举报
C#中public、private、protected、internal、protected internal & (2010-09-22 13:33:45)转载 标签: 杂谈 分类: C#

在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方法。

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
宋健 + 3
张文 + 1

查看全部评分

回复 使用道具 举报
public 访问级别最高,private级别最低。protected 能被本类及其派生类访问。
internal  ,internal protected 这两种的访问级别分情况
在同一个程序集中,internal 访问级别等同于public; internal protected 等同于  protected, 只能被本类及其派生类访问。
在不同程序集中,internal,internal protected修饰的类不能在不同程序集被访问
回复 使用道具 举报
只有public和internal可以放在class前面修饰,如果没写任何关键字,默认是internal.
1.public class:任何地方该类都可以被访问到。
2.internal class:只有在同一程序集内,该类才可以被访问到。
所有的修饰符都可以放在类型成员前面修饰
public,protected,private,internal.类型成员前如果没写任何关键字,默认为private。
protected的权限和private的权限很相似,唯一不同的是protected类型成员可以被子类继承,而private类型成员不可以被继承。

回复 使用道具 举报
internal和protected的比较:在程序集中是internal级别高,跨程序集的话,internal就等于私有,而protected还可能访问
回复 使用道具 举报
public:  对任何类和成员都公开, 无限制访问;
protected: 仅仅对该类以及该类的派生类公开;
private: 仅仅对该类公开;
internal: 只能值包含该类的程序集中访问该类(只是单独的项目,而不是整个解决方案);
protected internal: 只能在本类,派生类或者包含该类的程序集中访问.
public: >protected>private:>internal>protected internal

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马