Unity 之 参数类型之值类型参数的用法

文章目录

  • 基本数据类型
  • 结构体
    • 结构体的进一步补充
  • 总结:

在这里插入图片描述

当谈论值类型参数时,我们可以从基本数据类型和结构体两个方面详细解释。值类型参数指的是以值的形式传递给函数或方法的数据,而不是引用。

基本数据类型

基本数据类型的值类型参数:

在C#中,基本数据类型是内置的数据类型,例如整数、浮点数、字符等。这些数据类型是值类型,它们在传递给函数时会以值的方式进行复制。这意味着函数内部对参数的修改不会影响函数外部的原始值。

示例:

void ModifyInt(int x)
{
    x = 20; // 修改函数内的副本
}

int number = 10;
ModifyInt(number);
Console.WriteLine(number); // 输出:10,因为函数内的修改不影响原始值

结构体

结构体的值类型参数:

结构体是用户定义的值类型,它可以包含多个字段。当将结构体作为参数传递给函数时,会将整个结构体的副本传递给函数。这意味着函数内部的操作不会影响原始结构体实例。

示例:

struct Point
{
    public int X;
    public int Y;
}

void ModifyPoint(Point p)
{
    p.X = 20; // 修改函数内的副本
}

Point point = new Point { X = 10, Y = 15 };
ModifyPoint(point);
Console.WriteLine(point.X); // 输出:10,因为函数内的修改不影响原始结构体实例

结构体的进一步补充

在 C# 中,创建结构体的实例时只需要使用 new 关键字,而不需要使用 new 来赋值已有的结构体实例。这与引用类型(例如类)不同,引用类型使用 new 关键字来创建实例时,你可以使用 = 运算符将一个实例赋值给另一个实例,从而使两个变量共享同一个实例。

但是,对于结构体,使用 = 运算符实际上会复制结构体的值,而不是共享同一个实例。所以在大多数情况下,你只需要使用 new 关键字来创建一个新的结构体实例,而不需要将一个结构体实例赋值给另一个实例。

下面是一个简单的示例,演示了如何使用 new 关键字创建结构体的实例:

public struct Point
{
    public int X;
    public int Y;

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Point point1 = new Point(10, 20); // 创建并初始化结构体实例
        Point point2 = new Point(30, 40); // 创建并初始化另一个结构体实例

        Console.WriteLine($"point1: X = {point1.X}, Y = {point1.Y}"); // 输出:point1: X = 10, Y = 20
        Console.WriteLine($"point2: X = {point2.X}, Y = {point2.Y}"); // 输出:point2: X = 30, Y = 40
    }
}

在上面的示例中,我们分别使用 new Point(10, 20)new Point(30, 40) 来创建了两个不同的 Point 结构体的实例。

总结:

值类型参数在函数内部操作时,只会影响传递给函数的副本,不会影响原始值或实例。这适用于基本数据类型和结构体,无论传递的是整数、浮点数,还是自定义的结构体,函数内部对值类型参数的修改都不会传递到函数外部。这与引用类型(如类)不同,引用类型参数传递的是引用,函数内部对参数的修改会影响原始对象。

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

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

相关文章

【Java 动态数据统计图】动态数据统计思路案例(动态,排序,动态数组(重点推荐))七(129)

需求:前端根据后端的返回数据:画统计图; 说明: 1.X轴为地域,Y轴为地域出现的次数; 2. 动态展示(有地域展示,没有不展示,且高低排序) Demo案例: …

硬件SPI口扩展

在工控板设计中,经常会遇到扩展IO。具有相同的功能电路板接口相同,所以很容易采用排线方式连接到CPU主控板上,这种排线连接,我称之为总线。 现在的CPU引脚多,不扩展IO,使用模拟SPI,也可以实现&…

获取Linux内核源码

在嵌入式平台上做Linux开发的时候,我们用的kernel都是芯片厂家移植到自家平台上的,但是最初的原生Linux内核的源码是从哪里来的呢?下面我们介绍一下怎么获取原生的Linux源码。 从Linux社区获取内核kernel源码 Linux社区的官方网站是 https:…

.netcore grpc日志记录配置

一、日志记录配置概述 通过配置文件appsettings.json进行配置通过Program.cs进行配置通过环境变量进行配置客户端通过日志通道进行配置 二、实战案例 配置环境变量:Logging__LogLevel__GrpcDebug配置Appsettings.json配置Program.cs配置客户端工厂以上截图是目前为止已知的可…

基于MQTT协议的物联网网关实现远程数据采集及监控

在数字化时代的浪潮中,工业界正面临着前所未有的变革与机遇。而在这场变革中,基于MQTT协议的物联网网关崭露头角,成为连接工业设备、实现远程数据采集与监控的利器。其中,HiWoo Box作为一款出色的工业边缘网关,引领着这…

c语言每日一练(13)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,上学期间将看学业情况更新。 五道选择题: 1、程序运行的结果…

9、监测数据采集物联网应用开发步骤(7)

源码将于最后一遍文章给出下载 监测数据采集物联网应用开发步骤(6) 串口(COM)通讯开发 本章节测试使用了 Configure Virtual Serial Port Driver虚拟串口工具和本人自写的串口调试工具,请自行baidu下载对应工具 在com.zxy.common.Com_Para.py中添加如下内容 #RS…

RabbitMQ 的快速使用

docker部署rabbitmq # management才有管理页面 docker pull rabbitmq:management# 新建容器并运行 docker run \-e RABBITMQ_DEFAULT_USERadmin \ -e RABBITMQ_DEFAULT_PASSadmin \ -v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 \-itd \ra…

DNS指向别名还是IP

现在有一台服务器dbprod126,ip是172.22.100.4 现在有一个需求,需要在dns中对dbprod126建一个别名wondadb3r的记录,也就是ping wondadb3r的时候显示的是dbprod126的ip,目前有两​种方法,主要使用方法1指向别名&#xf…

SQL-basics

SQL 一些常用的查询语句用法 SQL 中的聚合函数 SQL 中的子查询 SQL 使用实例 SELECT F_NAME , L_NAME FROM EMPLOYEES WHERE ADDRESS LIKE ‘%Elgin,IL%’; SELECT F_NAME , L_NAME FROM EMPLOYEES WHERE B_DATE LIKE ‘197%’; SELECT * FROM EMPLOYEES WHERE (SALARY BET…

优化爬虫请求:如何选择合适的爬虫ip轮换策略?

在进行爬虫任务时,使用隧道爬虫ip并采用合适的轮换策略可以提高稳定性和效率。选择合适的隧道爬虫ip轮换策略可以优化您的爬虫请求过程。 1、考量目标网站特点 不同网站对于频繁请求可能有不同限制或反爬机制。 了解目标网站是否存在IP封禁、验证码等问题&#xff…

WebGIS的一些学习笔记

一、简述计算机网络的Internet 概念、网络类型分类、基本特征和功用是什么 计算机网络的Internet 概念 计算机网络是地理上分散的多台独立自主的计算机遵循约定的通讯协议,通过软、硬件互连以实现交互通信、资源共享、信息交换、协同工作以及在线处理等功能的系统…

AI聊天机器人平台Poe发布更新;自然语言理解课程概要

🦉 AI新闻 🚀 AI聊天机器人平台Poe发布更新 突破功能限制 增加企业级服务 摘要:知名问答网站Quora旗下的AI聊天机器人平台Poe发布了一系列更新,包括推出Mac应用、支持同时进行多个对话、接入Meta的Llama 2模型等功能。用户只需支…

【LeetCode】剑指 Offer <二刷>(5)

目录 题目:剑指 Offer 10- II. 青蛙跳台阶问题 - 力扣(LeetCode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 11. 旋转数组的最小数字 - 力…

AD16 基础应用技巧(一些 “偏好“ 设置)

1. 修改铺铜后自动更新铺铜 AD16 铺铜 复制 自动变形 偏好设置 将【DXP】中的【参数选择】。 将【PCB Editor】中的【General】,然后勾选上【Repour Polygons After Modification】。 2. PCB直角走线处理与T型滴泪 一些没用的AD技巧——AD PCB直角走线处理与…

【大数据】Apache Iceberg 概述和源代码的构建

Apache Iceberg 概述和源代码的构建 1.数据湖的解决方案 - Iceberg1.1 Iceberg 是什么1.2 Iceberg 的 Table Format 介绍1.3 Iceberg 的核心思想1.4 Iceberg 的元数据管理1.5 Iceberg 的重要特性1.5.1 丰富的计算引擎1.5.2 灵活的文件组织形式1.5.3 优化数据入湖流程1.5.4 增量…

基于Googlenet深度学习网络的人脸身份识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..................................................................... % 定义修改的范围 …

SpringBoot整合Websocket(Java websocket怎么使用)

目录 1 Websocket是什么2 Websocket可以做什么3 Springboot整合Websocket3.1 服务端3.2 客户端 1 Websocket是什么 WebSocket 是一种基于 TCP 协议的全双工通信协议,可以在浏览器和服务器之间建立实时、双向的数据通信。可以用于在线聊天、在线游戏、实时数据展示等…

npm报错sass

1.删除node模块 2.删除node-sass: npm uninstall node-sass 3.重新下载对应版本node-sass: npm i node-sass7.0.3(指定版本 控制台报错什么版本就写什么版本) 4.再运行项目 或者

区块链技术与应用 - 学习笔记1【引言】

大家好,我是比特桃。本系列主要将我之前学习区块链技术时所做的笔记,进行统一的优化及整合。其中大量笔记源于视频课程:北京大学肖臻老师《区块链技术与应用》公开课。肖老师的课让我找回了求知若渴般的感觉,非常享受学习这门课的…