C#类(一):类和对象---private、protected、public

任务描述

随着我国国力逐渐强盛,在多个城市中已经搭建了更为方便的公共交通:地铁。

搭乘地铁的之前,工作人员会对所有乘客进行安检,除了乘客的提包,而且还要确保乘客没有随身携带危险物品。

本关任务:编写一个乘客类,乘客成员属性包括提包和衣物,其中提包对工作人员是可见的,而衣物需要手动安检。

相关知识

public
关键字public是一个成员访问修饰符,表示所修饰的内容是公共的,访问不受限制。例如,我们使用public修饰一个类和该类的成员函数:

public class Person{
    string name;
    int age;
    public Person(){
        name = "Jackie";
        age = 20;
    }
    public void saying(){
        Console.Writeline("my name is"+name+", my age is"+age);
    }
}

那么我们可在别处访问此类,并使用该函数:

public class myCaller{
    public static void Main(string[] args){
        Person p = new Person();//公共类Person实例化一个对象,调用Person()构造函数初始化
        p.saying();//对象直接调用saying()函数
    }
}

我们在myCaller类中调用Person类,并实例化一个对象,使用该对象的公共方法saying()。需要注意的是,myCaller类和Person类可处在不同的项目中。

internal
关键字internal所修饰的类,将限制为内部类,即只有当前项目中的代码才能访问它。internal用法如下所示:

internal class Person{
    //类成员
}
具体实例:

namespace J3
{
    //使用internal修饰为内部类
    internal class Person
    {
        string name;
        int age;
        public Person(){
            name = "Jackie";
            age = 20;
        }
        public void saying() {
            Console.WriteLine("my name is "+name+", my age is "+age);
        }
    }
    public class myCaller {
        public static void Main(string[] args) {
            Person p = new Person();
            p.saying();
        }
    }
}

此段代码中,两个类在同一个namespace中,所以可在第二个类myCaller中调用并实例化类Person。注意,由于internal修饰为内部类,可访问性低于public所修饰的类,之后接触到继承的时候,内部类是无法被公共类所继承的

private
关键字private将修饰的内容访问限制为私有的。使用方法如下:
private <修饰内容>
例如我们可用private修饰类成员变量:

public class Person{
    private string name;
    private int age;
    //...
}

当使用private修饰之后,在其他地方便不能直接访问Person类的属性。例如下面的做法编译器将会报错:

public class Person{
    private string name;
    private int age;
    //...
}
public class myCaller{
    public static void Main(string[] args){
        Person p = new Person();
        p.name = "Jackie";  //报错,受保护级别限制
    }
}

相对于private,public修饰限定的成员则可以任意调用,可自行尝试。默认情况下,类成员前的private可省去,例如:

public class Person{
string name;
int age;
//…
}
此时,若没有指定修饰符,默认为private。

protected
关键字protected所修饰的内容为半公开化,与private基本相似。但当两个类存在继承关系的时候,例如类A继承于类B,那么对于类B则可访问protected修饰的类成员,而不可访问private修饰的类成员。继承将在之后实训学习,此处仅给出一个实例。

具体实例如下:

namespace J3
{
    class Person
    {
        //使用protected修饰
        protected string skinColor;
        public void saying() {
            Console.WriteLine("my skin color is " + skinColor);
        }
    }
    //WhitePerson类继承Person类
    class WhitePerson : Person {
        static void Main(string[] args){
            WhitePerson wp = new WhitePerson();
            wp.skinColor = "White";
            wp.saying();
        }
    }
}

运行结果如下:

my skin color is White

继承可理解为将普遍性向特殊性的一种拓展。代码中WhitePerson表示白色人种,具有“人”的所有特性,但从肤色上又与其他人种有所区别。继承用法简单介绍如下:

class A : B{
    //类成员代码
};

在类A和类B之间添加符号:表示类A继承类B。

所以在类B中可直接访问类A中protected修饰的成员。注:两个类可在不同的项目文件中。

编程要求

本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下:

编写一个乘客类Passenger,该类包括两个bool属性:包裹package和衣物clothing。

其中包裹对Worker类可见,衣物对Worker类不可见,需通过函数getClothing()获取。

在Worker类中,通过Passenger类构造函数实例化两个对象p1、p2,使用函数testing()检测p1、p2属性值

程序运行正常,输出与测试预期输出相符

测试说明
测试过程:

平台将编译用户补全后的代码,并根据程序的输出判断程序是否正确。
以下是测试样例:

测试输入:

预期输出:

Pass

Pass

Pass

Dangerous

我的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace J3
{
    /********** Begin *********/
    //Passenger类
      class Passenger
    {
        public bool package;
        private  bool clothing;
        // private bool clothing;
        public Passenger(bool package, bool clothing)
        {
            this.package = package;
            this.clothing = clothing;

        }
     public bool getClothing()
        {
            return this.clothing;
        }

    }

    /********** End *********/

    class Worker
    {
        public static void Main(string[] args)
        {
            Passenger p1 = new Passenger(true, true);
            Passenger p2 = new Passenger(true, false);

            /********** Begin *********/
            //使用函数testing查看p1、p2属性值
            testing(p1.package);
            testing(p1.getClothing());
            testing(p2.package);
            testing(p2.getClothing());



            /********** End *********/

        }
        //手动检测函数
        public static void testing(bool thing)
        {
            if (thing != true)
            {
                Console.WriteLine("Dangerous");
            }
            else
            {
                Console.WriteLine("Pass");
            }
        }
    }
}

题目链接

链接: link.

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
----------Database-------------- 1.DataTable帮助(DataTableHelper.cs) 2.Access数据库文件操作辅助(JetAccessUtil.cs) 5.查询条件组合辅助(SearchCondition.cs) 6.查询信息实体(SearchInfo.cs) 8.Sql命令操作函数(可用于安装程序的时候数据库脚本执行)(SqlScriptHelper.cs) ----------Device-------------- 声音播放辅助(AudioHelper.cs) 摄像头操作辅助,包括开启、关闭、抓图、设置等功能(Camera.cs) 提供用于操作【剪切板】的方法(ClipboardHelper.cs) 获取电脑信息(Computer.cs) 提供用户硬件唯一信息的辅助(FingerprintHelper.cs) 读取指定盘符的硬盘序列号(HardwareInfoHelper.cs) 提供访问键盘当前状态的属性(KeyboardHelper.cs) 全局键盘钩子。这可以用来在全球范围内捕捉键盘输入。(KeyboardHook.cs) 模拟鼠标点 击(MouseHelper.cs) 全局鼠标钩子。这可以用来在全球范围内捕获鼠标输入。(MouseHook.cs) MP3文件播放操作辅助(MP3Helper.cs) 关联文件(ExtensionAttachUtil.cs) 注册文件关联的辅助(FileAssociationsHelper.cs) 打开、保存文件对话框操作辅助(FileDialogHelper.cs) 常用的文件操作辅助FileUtil(FileUtil.cs) INI文件操作辅助(INIFileUtil.cs) 独立存储操作辅助(IsolatedStorageHelper.cs) 序列号操作辅助(Serializer.cs) 获取一个对象,它提供用于访问经常引用的目录的属性。(SpecialDirectories.cs) 简单的Word操作对象(WordCombineUtil.cs) 这个提供了一些实用的方法来转换XML和对象。(XmlConvertor.cs) XML操作(XmlHelper.cs) ----------Format-------------- 参数验证的通用验证程序。(ArgumentValidation.cs) 这个提供了实用方法的字节数组和图像之间的转换。(ByteImageConvertor.cs) byte字节数组操作辅助(BytesTools.cs) 处理数据型转换,数制转换、编码转换相关的(ConvertHelper.cs) CRC校验辅助(CRCUtils.cs) 枚举操作公共(EnumHelper.cs) 身份证操作辅助(IDCardHelper.cs) 检测字符编码的(IdentifyEncoding.cs) RGB颜色操作辅助(MyColors.cs) 日期操作(MyDateTime.cs) 转换人民币大小金额辅助(RMBUtil.cs) 常用的字符串常量(StringConstants.cs) 简要说明TextHelper。(StringUtil.cs) 获取中文字首字拼写,随机发生器,按指定概率随机执行操作(Util.cs) 各种输入格式验证辅助(ValidateUtil.cs) ----------Network-------------- Cookie操作辅助(CookieManger.cs) FTP操作辅助(FTPHelper.cs) HTML操作(HttpHelper.cs) 网页抓取帮助(HttpWebRequestHelper.cs) Net(NetworkUtil.cs) IE代理设置辅助(ProxyHelper.cs) ----------Winform-------------- 跨线程的控件安全访问方式(CallCtrlWithThreadSafety.cs) CheckBoxList(CheckBoxListUtil.cs) 窗口管理(ChildWinManagement.cs) 由马丁·米勒http://msdn.microsoft.com/en-us/library/ms996492.aspx提供一个简单的方法打印工作的一个RichTextBox一个帮手(ExRichTextBoxPrintHelper.cs) 显示,隐藏或关闭动画形式。(FormAnimator.cs) 对窗体进行冻结、解冻操作辅助(FreezeWindowUtil.cs) 窗体全屏操作辅助(Ful

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值