构造函数的小白理解

news2024/11/27 11:43:03
一、实例
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//定义一个名为Question的类,用于存储问题及相关信息
[Serializable]
public class Question
{
    public string questionText;//存储题目文本字段
    public string optionTextA;//选项A文本
    public string optionTextB;
    public string optionTextC;
    public string optionTextD;
    public string answerText;

    public Question(string question, string optionA, string optionB, string optionC, string optionD, string answer)
    {
        //初始化questionText为question
        questionText = question;
        optionTextA = optionA;
        optionTextB = optionB;
        optionTextC = optionC;
        optionTextD = optionD;
        answerText = answer;
    }
}
二、组成

三、作用

用于初始化类的字段,规定了当创建类的实例时应该如何设置字段的值。

四、基本写法
  • 首先,定义类名(例如 Question)。
  • 在类内部,定义构造函数。构造函数的名字与类名相同。
  • 在构造函数的参数列表中列出需要的参数。
  • 在构造函数的主体中,使用这些参数来初始化类的字段。
五、粗暴理解

构造函数实质上是不是就是用来规定由它创建的对象的格式的?(就是这个新创建出来的对象是由什么组成的)

答:是的,构造函数的主要作用之一就是定义当创建类的对象时应该如何初始化对象的状态。它规定了新创建的对象应该包含哪些字段(属性),并且这些字段的初始值是如何通过构造函数的参数来设置的。所以,构造函数确实可以看作是规定了由它创建的对象的“格式”或“组成”。

六、改进后的版本
using System;
using UnityEngine;

//定义一个名为Question的类,用于存储问题及相关信息
[Serializable]
public class Question
{
    private string questionText;//存储题目文本字段
    private string optionTextA;//选项A文本
    private string optionTextB;
    private string optionTextC;
    private string optionTextD;
    private string answerText;

    public string QuestionText//定义一个名字为QuestionText的公共属性
    {
        //get访问器。在类的外部通过公共属性(QuestionText)访问questionText这个私有字段的值
        get { return questionText; }

        //set访问器。在类的外部通过QuestionText修改questionText这个私有字段的值
        set { this.questionText = value; }
    }

    public string OptionTextA
    {
        // get 访问器:返回 optionTextA 的值
        get { return optionTextA; }
        // set 访问器:接收一个 string 类型的值,并将其赋值给 optionTextA
        set { this.optionTextA = value; }
    }
    public string OptionTextB
    {
        get { return optionTextB; }
        set { this.optionTextB = value; }
    }
    public string OptionTextC
    {
        get { return optionTextC; }
        set { this.optionTextC = value; }
    }
    public string OptionTextD
    {
        get { return optionTextD; }
        set { this.optionTextD = value; }
    }
    public string AnswerText
    {
        get { return answerText; }
        set { this.answerText = value; }
    }
    public Question(string question, string optionA, string optionB, string optionC, string optionD, string answer)
    {
        //初始化questionText为question
        this.questionText = question;
        this.optionTextA = optionA;
        this.optionTextB = optionB;
        this.optionTextC = optionC;
        this.optionTextD = optionD;
        this.answerText = answer;
    }
}
七、调用文本

//文本的路径(储存在filePath中)
string filePath = Path.Combine(Application.streamingAssetsPath, "test_01.txt");

string filePath

声明一个字符串类型的变量 filePath

Path.Combine() 

一个静态方法

用于将多个字符串组合成一个完整的路径字符串

这个方法会智能地处理路径中的分隔符,确保在不同操作系统上(如Windows使用\,而UNIX和Linux使用/)都能生成正确的路径。

Application.streamingAssetsPath 

Unity提供的一个属性

是返回streamingAssets文件夹的路径。

Path.Combine() 将这个路径(Application.streamingAssetsPath )和文件名 "test_01.txt" 结合起来,形成一个完整的文件路径。

// 使用File.OpenText打开文件,并创建一个StreamReader类型的变量(reader)读取内容
using (StreamReader reader = File.OpenText(filePath))
{
}

using (StreamReader reader = File.OpenText(filePath))

File.OpenText(filePath)

调用 File.OpenText(filePath)

StreamReader reader

创建一个名为readerStreamReader类对象,并将 StreamReader 对象赋值给 reader

StreamReader

从文件中读取字符

reader 

存储了一个可以从文件中读取文本的对象(StreamReader)。通过 reader 对象读取 test_01.txt 文件的内容

using 

确保 StreamReader 对象在使用完毕后被正确地关闭和释放。防止资源泄露

//声明字符串变量(line)用于存储从文件中读取的每一行内容
string line;
//逐行读取内容,直到读取到内容末尾
while ((line = reader.ReadLine()) != null){}

while ((line = reader.ReadLine()) != null) 

reader.ReadLine()

调用 reader.ReadLine() 从 reader中读取下一行文本

line = reader.ReadLine()

将读取到的文本(即一行字符串)赋值给 line 变量

!= null

检查 line 是否为 null。如果 line 不是 null,那么说明读取到了新的一行内容;如果 line 是 null,那么说明已经读取到了文件的末尾,没有更多的行可以读取了

如果 line 不是 null(即读取到了新的一行内容),那么执行 while 循环体内的代码块 {} 中的内容

这个 while 循环会一直执行,直到读取到文件的末尾(即 reader.ReadLine() 返回 null)。在循环体内,可对每一行内容 line 进行处理,比如打印出来、添加到列表中等等。

当 reader.ReadLine() 返回 null 时,while 循环的条件不再满足,循环就会结束,此时也可以选择在循环体外打印一条消息,说明已经读取完了文件的所有内容

八、显示文本——待改进
using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class QuizManager : MonoBehaviour
{
    public TextMeshProUGUI questionTextDisplay; // 假设您有一个UI Text组件用于显示问题
    public TextMeshProUGUI[] optionTextDisplays; // 假设您有一个Text数组用于显示选项

    private List<Question> questions = new List<Question>(); // 存储问题的列表
    private int currentQuestionIndex = 0; // 当前问题的索引

    // 初始化问题和选项
    void Start()
    {
        // 示例:添加问题到列表中
        questions.Add(new Question("问题1", "选项A1", "选项B1", "选项C1", "选项D1", "答案1"));
        questions.Add(new Question("问题2", "选项A2", "选项B2", "选项C2", "选项D2", "答案2"));
        // ... 添加更多问题

        // 显示第一个问题
        ShowQuestion(currentQuestionIndex);
    }

    void ShowQuestion(int index)
    {
        if (index < 0 || index >= questions.Count) return; // 索引越界检查

        Question question = questions[index];

        // 显示问题文本
        questionTextDisplay.text = question.QuestionText;

        // 显示选项文本
        for (int i = 0; i < optionTextDisplays.Length && i < 4; i++) // 假设最多4个选项
        {
            string optionText = "选项不存在"; // 默认文本,以防索引越界
            switch (i)
            {
                case 0: optionText = question.OptionTextA; break;
                case 1: optionText = question.OptionTextB; break;
                case 2: optionText = question.OptionTextC; break;
                case 3: optionText = question.OptionTextD; break;
            }
            optionTextDisplays[i].text = optionText;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1874575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中小企业数字化转型如何选择适合自己的MES系统?

随着信息技术的飞速发展&#xff0c;数字化转型已成为中小企业提升竞争力、实现可持续发展的关键途径。在数字化转型过程中&#xff0c;制造执行系统&#xff08;MES&#xff09;作为连接企业资源计划&#xff08;ERP&#xff09;与车间现场管理的桥梁&#xff0c;扮演着至关重…

Docker部署前端,动态配置后端地址

本文介绍了使用Docker环境变量动态配置nginx。采用的是通过docker run -e xxxxxxx先往容器注入环境变量&#xff0c;然后进一步通过envsubst指令将环境变量写入到conf文件中&#xff0c;实现动态配置文件内容。 背景 前后端分离的架构下&#xff0c;经常会用到nginx反向代理来…

并发编程基础概念

相关概念 并行 并行是指同一个时刻&#xff0c;多个任务同时进行。只有在多核CPU下才会发生。 并发 并发是指单个CPU在不同任务之间来换切换工作&#xff0c;但是同一时刻只有一个任务在工作。由于CPU的切换速度很快&#xff0c;给人的感受是多个任务在一起运行。 串行 串行…

程序员敲代码的习惯你占几样撒?

IT行业的科技公司们一直苦苦追寻传说中以一当十的超级程序员&#xff0c;最新的研究表明确实存在这样一小撮效率奇高的“程序金刚”&#xff0c;但是一位普通程序猿如何能够蜕变成代码金刚呢&#xff1f; 国内外的各大专家总结了导致程序猿效率低下&#xff0c;代码为什么像坨s…

制造业包括哪些?需要堡垒机吗?

制造业-国民经济的主体&#xff0c;是立国之本、兴国之器、强国之基&#xff0c;一个关系着大家吃穿住行的行业&#xff0c;一个与大家息息相关的行业。但大家对于制造业还有很多不了解&#xff0c;有小伙伴在问&#xff0c;制造业包括哪些&#xff1f;需要堡垒机吗&#xff1f…

在创意设计领域“刷屏”的人工智能生成内容(AIGC)是什么?

在创意设计领域“刷屏”的人工智能生成内容&#xff08;AIGC&#xff09;是什么&#xff1f;这是一个值得深入探讨的话题&#xff0c;它关乎技术的革新、创意的边界以及未来设计行业的走向。随着人工智能技术的飞速发展&#xff0c;AIGC&#xff08;Artificial Intelligence Ge…

小米大模型提效新框架:训练最高提速34%,推理最高提速52%!Kaldi之父合作出品

大模型推理速度提升50%以上&#xff0c;还能保证少样本学习性能&#xff01; 小米大模型团队提出SUBLLM&#xff08;Subsampling-Upsampling-Bypass Large Language Model&#xff09;&#xff0c;国际AI语音大牛、开源语音识别工具Kaldi之父Daniel Povey也参与指导。 与Llam…

【学习笔记】爱立信SPO 1400 CRAFT软件基础知识4——图形用户界面之通知列表和状态栏

一、前期准备 提示&#xff1a;下面所有学习内容都是基于以下条件完成的 条件1.已经正确安装并正常运行SPO 1400 CRAFT软件&#xff08;以下简称LCT&#xff09; 条件2.确认已正确使用爱立信SPO 1400 CRAFT软件通过网络登录设备&#xff08;以下简称NE&#xff09; 具体登录…

大数据学习之分布式数据采集系统Flume学习

分布式数据采集系统Flume学习 一、Flume架构 1.1 Hadoop业务开发流程 1.2 Flume概述 flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。 支持在日志系统中定制各类数据发送方&#xff0c;用于收集数据; 同时&#xff0c;Flume提供对数据进行简单处理&…

怎么在线电脑上做图片二维码?在线3步图片转活码的制作方法

图片怎么才能做成二维码展示呢&#xff1f;图片生成二维码的方式能够在手机上查看图片&#xff0c;有利于图片的快速分享&#xff0c;通过这种方法能够减少对内存的占用&#xff0c;也提高了用户获取图片的便利性。通过生成图片活码能够不断提供最新的图片给用户展示&#xff0…

某山词霸翻译js逆向分析

一、基础知识 1、post的几种发包的方式 2、query string和form data的区别 Query String Parameters&#xff1a; GET请求时&#xff0c;参数会以url string 的形式进行传递&#xff0c;即?后的字符串则为其请求参数&#xff0c;并以&作为分隔符。&#xff08;有时候pos…

RocketMQ快速入门:linux安装rocketmq并配置开机自启(十一)

目录 0. 引言1. 下载安装包1.1 高版本直接下载安装包1.2 下载源码包进行编译 2. namesrv和broker安装2.1 安装2.2 放开服务器端口2.3 测试 3. 配置开机自启3.1 配置namesrv开机自启3.2 配置broker开机自启 0. 引言 之前我们针对本机电脑安装rocketmq进行了讲解&#xff0c;同时…

营销翻车,杜国楹出面道歉,小罐茶的“大师作”故事仓皇结尾

“小罐茶&#xff0c;大师作”&#xff0c;这句slogan曾一度在央视平台长时间、高密度播放&#xff0c;成为家喻户晓的广告词&#xff0c;也打响了小罐茶品牌的名号。但同时&#xff0c;市场上关于“大师作”真实性的质疑也从未停息。 就在6月25日小罐茶十二周年发布会上&#…

页分裂和页合并——Java全栈知识(33)

上篇文章我们讲到了 MySQL 的数据页&#xff0c;我们说到了 InnoDB 的索引是以 B树的形式构建的&#xff0c;而且 B树的节点都是一个数据页。 但是 B树在使用过程中难免会有节点分裂和节点合并的过程。 因为我们是以数据页为基本单位构造的 B树&#xff0c;那么 B树的节点分裂和…

django —— 搭建项目及简单测试

打开Pycharm编辑器 新建项目 File -> New Project 创建应用管理 -> myapp 打开终端输入 python38 manage.py startapp myapp 执行后会在项目下自动生成myapp文佳夹 把myapp配置到settings.py中 在settings.py文佳INSTALLED_APPS 中输入 在views.py中编写业务接口 把…

云计算:重塑数字时代的基石

目录 一、引言 二、云计算的定义与特点 三、云计算的发展历程 四、云计算的应用场景 五、云计算面临的挑战 六、云计算的未来发展趋势 七、结语 一、引言 随着信息技术的飞速发展&#xff0c;云计算已经逐渐渗透到我们生活的方方面面。从个人用户的在线存储、在线办公&…

昇思25天学习打卡营第5天|数据变换 Transforms

昇思25天学习打卡营第5天|数据变换Transforms 前言数据变换 TransformsCommon TransformsCompose Vision TransformsRescaleNormalizeHWC2CHW Text TransformsPythonTokenizerLookup Lambda Transforms 个人任务打卡&#xff08;读者请忽略&#xff09;个人理解与总结 前言 非常…

树莓派4B学习笔记14:Python多线程编程_线程间的同步通信_(锁‘threading.Lock’)

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 今日学习树莓派与Python的多进程编程_线程间同步通信 文…

capitalize()方法——字符串首字母转换为大写

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 capitalize()方法用于将字符串的首字母转换为大写&#xff0c;其他字母为小写&#xff0c;例如图1所示的效果。 图1 字符串首字母大写效果…

安全技术和防火墙(2)

安全技术和防火墙 文章目录 安全技术和防火墙安全技术防火墙通信的五大要素和四大要素四表五链*控制类型管理选项&#xff1a;匹配条件实验步骤关闭防火墙 添加规则指定IP地址指定多个ip指定端口拒绝访问nginx删除规则修改策略修改链拒绝整个网段禁止多个端口匹配mac地址 iptab…