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

这篇具有很好参考价值的文章主要介绍了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.文章来源地址https://www.toymoban.com/news/detail-456496.html

到了这里,关于C#类(一):类和对象---private、protected、public的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java当中四种权限刨析( private、default、protected、public)

    目录 一、java权限简介 二、举例使用 1.private 2.默认权限(default) 3.protected 4.public 注意        java当中有4种访问修饰限定符privat、default(默认访问权限),protected以及public。只有默认访问权限和public能够用来修饰类。修饰类的变量和方法四种权限都可以。 private:如果一个

    2024年02月06日
    浏览(35)
  • 【C++】继承 ⑤ ( public 公有继承 - 示例分析 | protected 保护继承 - 示例分析 | private 私有继承 - 示例分析 )

    成员的访问属性 需要看根据下面的逻辑进行判定 : 调用位置 : 看是在哪调用的 , 在 类内部 , 派生类 ( 子类 ) , 还是在 类外部 ; 子类继承方式 : 公有继承 : public 保护继承 : protected 私有继承 : private 父类中的访问级别 : 公有成员 : public 保护成员 : protected 私有成员 : private 如 :

    2024年02月08日
    浏览(28)
  • 【Java】使用PowerMockito mock static方法/new对象/mock对象的public或private方法的简单示例

    1.1 打桩类的public static方法 测试用例中如果需要对public静态方法的打桩,针对测试类增加注解@RunWith(PowerMockRunner.class)同时针对静态方法所在的类增加注解@PrepareForTest({StaticMethod.class}),接着在测试用例调用方法之前增加 PowerMockito.mockStatic(StaticMethod.class); PowerMockito.when(StaticMet

    2024年01月24日
    浏览(32)
  • 第八章:私有 / 公共函数 Private / Public Functions

    ​ Solidity 定义的函数的属性默认为公共。 这就意味着任何一方 (或其它合约) 都可以调用你合约里的函数。 显然,不是什么时候都需要这样,而且这样的合约易于受到攻击。 所以将自己的函数定义为私有是一个好的编程习惯,只有当你需要外部世界调用它时才将它设置为公

    2024年02月11日
    浏览(42)
  • Unity 之 变量修饰符public 与private 以及默认

    当在Unity中使用 public 修饰符时,它将变量声明为 公共变量 ,这意味着该变量可以在Unity编辑器中进行设置,并且可以从其他脚本中访问和修改。公共变量在Unity中广泛用于在脚本之间共享数据,以及在Inspector面板中显示自定义设置。以下是关于 public 修饰符的详细信息和示例

    2024年02月11日
    浏览(34)
  • 轻松理解Java中的public、private、static和final

    一、概念 1、public和private 两个都是访问权限修饰符,用于控制外界对类内部成员的访问。 public:表明对象成员是完全共有的,外界可以随意访问。用public修饰的数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用。 private:表明对象成员是完全私有的,不

    2024年02月16日
    浏览(33)
  • Controller 中的请求方法,private 和 public有什么区别?别用错了!

    作者:hinotoyk 链接:https://juejin.cn/post/6910215219822362632 背景:某日在公司中撸代码的时候,在一个常用的controller中添加一个方法,测试时突然报错说注入的service为null,捣鼓一阵发现后是方法修饰符写成private,修改成public后搞定。为什么会产生这个问题呢?就自己测试一下是哪

    2024年02月08日
    浏览(29)
  • 【C/C++编译】CMake定义头文件路径、链接库路径及链接选项:PRIVATE,INTERFACE,PUBLIC

    在 CMake 中, 有许多常见的变量可用于配置和管理构建过程 。以下是一些常见的变量,包括当前源码路径: CMAKE_SOURCE_DIR : 当前 CMakeLists.txt 所在的源码目录的根路径 。 CMAKE_BINARY_DIR :构建目录的根路径,即 构建生成的可执行文件、库和其他构建输出的存放位置 。 CMAKE_CUR

    2024年02月11日
    浏览(36)
  • 拦截|篡改|伪造.NET类库中不限于public的类和方法

    大家好,我是沙漠尽头的狼。 本文首发于Dotnet9,介绍使用 Lib.Harmony 库拦截第三方 .NET 库方法,达到不修改其源码并能实现修改方法逻辑、预期行为的效果,并且不限于只拦截 public 访问修饰的类及方法,行文目录: 什么是方法拦截? 示例程序拦截 非public方法怎么拦截? 总

    2024年02月08日
    浏览(27)
  • 【Nuxt3】nuxt3目录文件详情描述:.nuxt、.output、assets、public、utils(一)

    nuxt3的中文网站 上次简单介绍了nuxt3创建项目的方法和目录文件大概用处。 这次详细说下.nuxt、.output、assets、public、utils五个文件夹的用处。 Nuxt在开发中使用.nuxt/目录来生成你的Vue应用程序。 为了避免将开发构建的输出推送到你的代码仓库中,你应该将这个目录添加到你的

    2024年01月18日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包