《.NET程序员面试秘笈》----面试题3 描述private、protected、internal和public修饰符的作用...

本节书摘来自异步社区《.NET程序员面试秘笈》一书中的第1章,面试题3,作者: 张云翯, 更多章节内容可以访问云栖社区“异步社区”公众号查看。

面试题3 描述private、protected、internal和public修饰符的作用

.NET程序员面试秘笈
【考点】理解访问权限存在的意义,各种访问权限的作用,在代码中灵活应用访问权限。

【出现频率】

【解答】

1.private修饰符
private修饰符用于设置类或类成员的访问权限仅为所属类的内部,private也被称为私有修饰符。某些时候需要访问私有类成员时,可通过get和set访问器读取或修改。本例通过对类的私有成员及私有类的访问,展示private修饰符的保护作用。在ch01目录下新建一个程序文件,并命名为ModPrivate.cs,编写代码如程序1.3所示。


a5cf1f9d3a1e93996608f48c4f19a19c30449f16


cbb49e567a528678460acf2191b2cbd84ca2f6cb

2.protected修饰符
protected修饰符用于设置类或类成员的访问权限仅为所属类及子类的内部。本例通过对类的私有成员及私有类的访问,展示private修饰符的保护作用。在ch01目录下新建一个程序文件,并命名为ModProtected.cs,编写代码如程序1.4所示。


3346e470acd27bbefd4d6973b935bcbcb004d198


9f1d13bc46794b1a36497d9f38b3abda2218009a

3.internal修饰符
internal修饰符修饰的类或类成员的访问权限为同一程序集内部,C#默认的类访问修饰符即为internal。前面两个示例中,需要供类外部代码访问的成员都使用了internal修饰符,因为这些类都处于同一程序集中。

4.public修饰符
public修饰符则为公共访问权限,对代码的访问没有任何限制。大多数情况下须谨慎使用public修饰符,因为滥用将影响类的封装性,并且带来安全隐患。

以下为代码的运行结果:

(1)在命令行下编译ModPrivate.cs后,执行ModPrivate程序,其效果如图1.5所示。

从本例代码中可知,ZooTiger类无法在类的外部直接访问,所有的私有成员只能在类的内部访问,本例采用了get访问器访问了小狗和老虎的品种,并创建了ZooTiger私有类的对象。有的读者可能会迷惑,如果同时使用get和set访问器,private修饰符意义何在?其实很多程序中确实有这样的做法,这样做向类的外部屏蔽了私有成员的实现方法,同时也隐藏了私有成员的实际名称,有利于封装性。例如本例,get访问器中有两步操作,而外界无法获知。


b7806775726d98e0aa96f002353bd315738b44d1

(2)在命令行下编译ModProtected.cs后,执行ModProtected程序,其效果如图1.6所示。


a79d91f84bbbe4fffd6d3c64f37f7ec4a3f97ede

本例接收用户的输入,当输入值为“华南虎”时,创建ChinaTiger类的对象,并通过构造函数赋值“华南虎”字符串给_type字段。_type字段声明中使用了protected修饰符,所以在Tiger类的子类(ChinaTiger类)中可被直接访问。

注意:
 

即使派生类和基类在不同程序集中,派生类仍可访问基类的protected修饰符成员。读者必须清楚的一点是,派生类继承了所有基类的成员,只是无法直接访问基类的private修饰符成员,但可访问protected修饰符成员。

【分析】

面向对象编程的特征之一就是封装性,而类就是封装性的典型体现。在生活中,人们不需要知道电器的内部构造,但是能很容易地使用电器,这就是封装性。在项目中需要编写很多功能类,在程序运行时只需要使用类所提供的功能,大部分类内部的代码实现需要封装,拒绝外部访问。这样大大增加了类的内部代码安全性和稳定性,同时多个功能类之间也减少了互相干扰的可能。访问权限修饰符即可将类及类的成员划分多种安全级别,根据不同需要设置访问权限。

internal和public访问修饰符是需要谨慎选择的,多数情况下应该尽量使用internal访问修饰符。

还有一种访问修饰符,即protected internal修饰符,可在子类中或同一程序集内被访问。如果要声明成员只能被同一程序集内的派生类(子类)访问,则应首先设置所属类为internal,成员设置为protected。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值