C# 传值参数

传值参数

1.值类型

  • 值参数创建变量的副本:当传递值参数时,实际上是创建了原始变量的一个副本,然后将副本传递给方法。
  • 对值参数的操作永远不影响变量的值:由于是复制了一份新的副本,所以对副本进行操作不会影响原始变量的值。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ParametersExample
{internal class Program{static void Main(string[] args){Student stu=new Student();int y = 100;stu.AddOne (y);Console.WriteLine("y="+y);Console.ReadKey();}}class Student{public void AddOne(int x){x = x + 1;Console.WriteLine(x);}}
}

在该代码中:AddOne 方法中的 x 是按值传递的,即 y 的值被复制给了 x,而在 AddOne 方法中对 x 的修改不会影响到 y 的原始值。

由此可知,在 C# 中,当我们通过值传递方式将一个变量传递给方法时,该方法内部对参数所做的任何修改都不会影响到原始变量的值。


2.引用类型1

我们都知道,引用类型的变量与实例时分开的

引用类型的变量会引用引用类型的实例,本质上是,引用类型的变量存储的值是引用类型的实例在堆内存当中的地址

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ParametersExample
{internal class Program{static void Main(string[] args){Student stu = new Student() { Name = "Tim" };SomeMethod(stu);Console.WriteLine("{0},{1}", stu.GetHashCode(), stu.Name);Console.ReadKey ();}static void SomeMethod(Student stu){stu = new Student() { Name = "Tim" };Console.WriteLine("{0},{1}",stu.GetHashCode(),stu.Name);}}class Student{public string Name { get; set; }    }
}

当运行这段代码时:

  1. SomeMethod 方法中创建了一个新的 Student 实例,并打印了它的哈希码和名称。因为两次都设置 Name 为 "Tim",所以输出的名称将是 "Tim"
  2. 虽然 SomeMethod 方法内部改变了 stu 的引用指向了一个新的实例,但 Main 方法中的 stu 实例没有改变,因此Main 方法中输出的是原始 stu 实例的哈希码和名称。

注意,在实际编程中,很少会在方法内部创建一个新的对象。


3.引用类型2

通过值参数,只更新对象不创建新对象

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ParametersExample
{internal class Program{static void Main(string[] args){Student stu = new Student() { Name = "Tim" };UpdateObject(stu);Console.WriteLine("{0},{1}", stu.GetHashCode(), stu.Name);Console.ReadKey ();}static void UpdateObject(Student stu){stu.Name = "Tim" ;Console.WriteLine("{0},{1}",stu.GetHashCode(),stu.Name);}}class Student{public string Name { get; set; }    }
}

注意,在实际编程中,很少通过传进来的参数,修改引用对象的值。

对于方法而言,输出主要靠返回值。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python,json数据格式,pyecharts模块,pycharm中安装pyecharts

json数据格式 JSON是一种轻量级的数据交互格式 可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 主要功能: json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互. 类似于: 国…

普元Devops-在云主机上拉取harbor的docker镜像并部署

1 前言 本文讲解如何从普元Devops配置构建,从而实现在云主机上拉取Docker镜像,然后运行Docker容器,实现云主机的Docker部署。 2 主要步骤说明 首先,我们有一个Devops服务器,还有一个云主机服务器,还有一个…

【微信小程序】如何触发按钮事件,例如调起微信客服

需求 实现一个如下图的效果, 点击客服按钮, 调起微信客服功能, 需要和button组合使用 效果图 实现思路 客服只能通过button按钮调起, 所以我们需要写一个button按钮, open-type“contact”, 然后把它隐藏起来。给客服图标加一个label, 设置for“btnId”, 这样点击图片就会触…

在ElementUI项目中集成iconfont图标库

在前端项目开发中经常会遇到使用的组件库提供的ICON图标不够用的情况。最常见的解决方案无非就是把设计图的图标切图引入到项目中。还有就是使用svg图标,封装一个渲染组件在项目里面直接引入这个组件。 本文将介绍另一种方法,即集成iconfont图标库的图标…

养老小程序源码家政服务小程序开发方案

预约上门养老小程序,是php开发预约,前端是uniapp,有开发好的小程序案例,可源码,也可以二开,也可以定制开发。 一 用户端:服务分类、服务内容详情介绍、在线下单支付,管理我的订单。…

前缀和差分【算法 13】

在算法领域中,前缀和与差分数组是两种高效处理区间问题的技术。它们能在特定问题场景下将时间复杂度从 (O(n)) 降到 (O(1)),适用于频繁的区间查询与修改操作。本文将简要介绍这两种技术及其应用。 1. 前缀和 (Prefix Sum) 前缀和是指一个数组的第 (i)…

利用TOPSIS算法进行生长素和施肥量对农作物各指标影响力的分析

文章目录 1 摘要2 问题的重述1. 背景介绍2. 问题的产生及进行数学建模的意义 3 TOPSIS算法1. TOPSIS算法介绍2. TOPSIS算法使用步骤 4 问题的分析1. 对问题一的分析及解答2. 对问题二的分析及解答3. 对问题三的分析及解答 5 模型的改进1. 验证2.模型改进…

整理了几十家高频面试题,让你避坑软件测试公司面试的套路,收藏收藏刷起来...

俗话说金九银十,就要到找工作的高峰期了 年前找我拿面试题的姐妹已经收到offer了,准备换工作的抓紧背起来哦 去面试的,一定要提前了解一下,这些面试题。可能不是特别全面,但是已经够用了。你们面试时还遇到了哪些奇葩…

Redis中的数据类型及应用场景(面试版)

五种常用数据类型介绍 Redis中存储的都是key-value对结构的数据,其中key都是字符串类型,value有5种常用的数据类型: 字符串 string 哈希 hash 列表 list 集合 set 有序集合 sorted set / zset 各种数据类型特点 解释说明: …

【C++】vector(下)--上篇

个人主页~ vector(上)~ vector 二、vector的模拟实现1、了解组成2、vector.h(1)为什么有了size_t参数的vector构造函数还要再写一个int参数的重载vector构造函数(2)为什么reserve不用memcpy(3&…

DAMA数据管理知识体系(第3章 数据治理)

课本内容 3.1 引言 数据治理(Data Governance,DG)的定义是在管理数据资产过程中行使权力和管控,包括计划、监控和实施。数据治理项目的范围和焦点 战略 定义、交流和驱动数据战略和数据治理战略的执行制度 设置与数据、元数据管理…

MySQL编译安装

1.源码包地址 2.编译/安装 3.设置环境变量 4.初始化/登录 地址: MYSQL源码包下载 右键复制链接 使用wget 下载到/usr/local/src下 再使用rpm –ivh 安装 --这个时候跳转到 cd /root/rpmbuild/SOURCES 使用ll查看有什么东西 yum -y install gcc gcc-c ncurses ncurses-d…

Tensorflow实现深度学习8:猫狗识别

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 导入数据 import matplotlib.pyplot as plt import tensorflow as tf # 支持中文 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] Fals…

本地部署Xinference实现智能体推理工作流(二)

第二篇章 Dify接入 Xinference 部署的本地模型 1. 安装Dify 克隆 Dify 源代码至本地。 git clone https://github.com/langgenius/dify.git 2. 启动Dify 进入 Dify 源代码的 docker 目录,执行一键启动命令: cd dify/docker cp .env.example .env d…

Linux学习(15)-网络编程:滑动窗口、拥塞控制、udp

本节学习内容 1.滑动窗口(1.滑动窗口的作用2.如果如果接收端填充的接收窗口为0,发送端接下来怎么处理3.糊涂窗口综合征4.tcp中nagle算法是什么) 2.拥塞控制 3.udp协议特点及编程流程 本节可能会用到的指令 ifconfig查看自己的ip地址 pi…

Amazon Bedrock 实践:零基础创建贪吃蛇游戏

本文探讨了如何利用 Amazon Bedrock 和大型语言模型,快速创建经典的贪吃蛇游戏原型代码。重点展示了利用提示工程,将创新想法高效转化为可运行代码方面的过程。文章还介绍了评估和优化提示词质量的最佳实践。 亚马逊云科技开发者社区为开发者们提供全球的…

C# UserControl、Dockpanel和DockContent、Cursor、

一、UserControl类 UserControl 是 .NET 中的一个基类,用于创建自定义控件,主要用于 Windows Forms 和 WPF。通过继承 UserControl,你可以设计和实现具有特定界面和功能的控件组件。UserControl 允许你将多个标准控件组合在一起,…

网络层 III(划分子网和构造超网)【★★★★★★】

(★★)代表非常重要的知识点,(★)代表重要的知识点。 一、网络层转发分组的过程 分组转发都是基于目的主机所在网络的,这是因为互联网上的网络数远小于主机数,这样可以极大地压缩转发表的大小。…

C++和QT

引用 概念 引用是个别名 格式 数据类型 &引用名 同类型的变量名 (&引用符号) 数据类型 &引用名 同类型的变量名 (&引用符号)int a 10;int &b a; //给a取个别名叫b, b引用a 数组引用 int a;a10;int &…

【AI绘画】Midjourney前置指令/describe、/shorten详解

文章目录 💯前言💯Midjourney前置指令/describe使用方法1️⃣2️⃣3️⃣4️⃣(选择对应提示词生成图片)🔄(重新识别生成提示词)🎉Imagine all(一次性生成所有&#xff09…