构造函数的小白理解

一、实例
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;
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安利一款AI驱动的可视化大屏产品,支持一键导出源码

数据可视化作为一种直观呈现信息的方式&#xff0c;在各个领域都具有关键作用&#xff0c;能够帮助我们更好地理解和分析数据。今天和大家分享一款我体验了很久的可视化大屏制作工具——山河鉴数据可视化源码工具。 我们使用它可以轻松通过拖拽式来搭建可视化大屏&#xff0c;并…

React 中 useEffect

React 中 useEffect 是副作用函数&#xff0c;副作用函数通常是处理外围系统交互的逻辑。那么 useEffect 是怎处理的呢&#xff1f;React 组件都是纯函数&#xff0c;需要将副作用的逻辑通过副作用函数抽离出去&#xff0c;也就是副作用函数是不影响函数组件的返回值的。例如&a…

日元一路暴跌,对日股是利好还是利空? “年中高息”效应不再,货基与回购收益率走低

日元汇率自5月突破155后&#xff0c;股市已开始认识到日元疲软的负面影响&#xff0c;日元贬值与股价上涨的相关性已被打破&#xff0c;股市投资者现在需要关注日元贬值的水平。 6月28日周五&#xff0c;美国重磅PCE物价指数公布前夕&#xff0c;日元再度深跌至1美元兑161日元&…

【漏洞复现】Atlassian Confluence RCE(CVE-2023-22527)

产品简介 Atlassian Confluence 是一款由Atlassian开发的企业团队协作和知识管理软件&#xff0c;提供了一个集中化的平台&#xff0c;用于创建、组织和共享团队的文档、知识库、项目计划和协作内容。是面向大型企业和组织的高可用性、可扩展性和高性能版本。 0x02 漏洞概述 …

渗透测试入门教程(非常详细),从零基础入门到精通,看完这一篇就够了

什么是渗透测试 渗透测试就是模拟真实黑客的攻击手法对目标网站或主机进行全面的安全评估&#xff0c;与黑客攻击不一样的是&#xff0c;渗透测试的目的是尽可能多地发现安全漏洞&#xff0c;而真实黑客攻击只要发现一处入侵点即可以进入目标系统。 一名优秀的渗透测试工程师…

BigInteger 和 BigDecimal(java)

文章目录 BigInteger(大整数&#xff09;常用构造方法常用方法 BigDecimal(大浮点数&#xff09;常用构造方法常用方法 DecimalFormat(数字格式化) BigInteger(大整数&#xff09; java.math.BigInteger。 父类&#xff1a;Number 常用构造方法 构造方法&#xff1a;BigIntege…

新书速览|解密AI绘画与修图: Stable Diffusion+Photoshop

《解密AI绘画与修图&#xff1a; Stable DiffusionPhotoshop》 本书内容 《解密AI绘画与修图&#xff1a;Stable DiffusionPhotoshop》全面介绍了Photoshop和Stable Diffusion的交互方式&#xff0c;以及各自的AI功能和具体使用方法。除了讲解功能&#xff0c;还通过实际案例加…

【PyQt】20-动态显示时间(QTimer)

QTimer 前言一、QTimer介绍二、动态时间展示2.1 代码2.2 运行结果 总结 前言 好久没学习了。 一、QTimer介绍 pyqt里面的多线程可以有两种实现方式&#xff1a; 一、QTimer 二、QThread 多线程&#xff1a;同时完成多个任务。 定时器就是每隔一段时间调用一次。 二、动态时…

net Framework OAuth2.0

grant_type client_credentials 客户端凭证password 密码模式 用于资源所有者密码凭据token 隐藏式 、 简化式 简化模式又称为隐式授权码模式&#xff0c;它是授权码模式的一个简化版本authorization_code 授权码 A. 第三方程序向资源拥有者(用户)发送授权请求&#xf…

django模型、项目、配置、模型类、数据库操作、查询、F/Q对象、字段类型、聚合函数、排序函数

模型重点 模型配置数据的增删改 增:book BookInfo() book.save() 和BookInfo.objects.create()删:book.delete() 和BookInfo.objects.get().delete()改:book.namexxx book.save() 和 BookInfo.objects.get().update(namexxx)数据的查询 基础查询F对象和Q对象关联查询 查询集Q…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 两个字符串间的最短路径(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

海外媒体发稿:加拿大媒体宣发投放新形势-大舍传媒

1. 加拿大主要媒体 加拿大拥有众多知名的媒体机构&#xff0c;它们在各自领域内具有重要影响力。以下是加拿大一些主要媒体的 1.1 加拿大环球邮报&#xff08;The Globe And Mail&#xff09; 加拿大环球邮报是加拿大最大的全国性英文日报之一&#xff0c;成立于1874年。它以…

ASUS/华硕天选5 FX607J系列 原厂Windows11系统

安装后恢复到您开箱的体验界面&#xff0c;带原机所有驱动和软件&#xff0c;包括myasus mcafee office 奥创等。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http:…

机器学习python实践——关于管道模型Pipeline和网格搜索GridSearchCV的一些个人思考

最近在利用python跟着指导书进行机器学习的实践&#xff0c;在实践中使用到了Pipeline类方法和GridSearchCV类方法&#xff0c;并且使用过程中发现了一些问题&#xff0c;所以本文主要想记录并分享一下个人对于这两种类方法的思考&#xff0c;如果有误&#xff0c;请见谅&#…

Java 实现将List按照字符串(特定规则)排序

日常开发中我们通常会遇到将一个List按照特定的规则排序&#xff0c;例如我们需要将一个List按照 “广州市”, “深圳市”, “珠海市”, “汕头市” 的顺序排序&#xff0c;我们可以使用下述方式实现。 City实体类 import lombok.AllArgsConstructor; import lombok.Data; im…

ingress相关yaml文件报错且相关资源一切正常解决方法

今天在执行ingress相关文件的时候莫名其妙报错了&#xff0c;问了别人得知了这个方法 执行ingress相关文件报错 01.yaml是我自己创建关于ingress的yaml文件 报错信息 且相关资源一切正常 解决方法 kubectl get validatingwebhookconfigurations删除ingress-nginx-admissio…

关于Mac mini 10G网口的问题

问题: 购入一个10G网口的Mac mini M2&#xff0c;将其和自己的2.5G交换机连接&#xff0c;使用共享屏幕进行远程操作的过程中出现了频率极高的卡顿&#xff0c;几乎是几秒钟卡一下&#xff0c;使用ping进行测试发现卡的时候就ping不通了。测试使用Mac mini的无线网和雷电转2.5G…

Web渗透-逻辑漏洞

一、概述 逻辑漏洞是指由于程序逻辑不严或逻辑太复杂&#xff0c;导致一些逻辑分支不能够正常处理或处理错误&#xff0c;一般出现任意密码修改&#xff08;没有旧密码验证&#xff09;,越权访问&#xff0c;密码找回&#xff0c;交易支付金额等。对常见的漏洞进行过统计&…

被 AI meme 梗图整破防了...

文章首发于公众号&#xff1a;X小鹿AI副业 大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 前一阵刚刚分享了一…

详细分析Oracle中的tnsnames.ora基本知识 以及 PLSQL如何连接(附Demo)

目录 1. tnsnames.ora2. Demo3. 实战 1. tnsnames.ora Oracle 数据库网络配置文件&#xff0c;用于配置客户端与数据库服务器之间的连接 定义网络服务名称&#xff0c;客户端可以使用这些名称连接到数据库实例 基本的路径如下&#xff1a; Windows: ORACLE_HOME\network\ad…