C#参数传递类型及机制

C#中的委托与事件:你真的知道如何用好它们吗? 委托是一种引用类型的数据结构,它允许我们将方法作为参数传递。简单来说,委托就像是一个可以存储方法引用的变量。这对于实现回调机制非常有用,可以让我们在某个时刻调用指定的方法。事件是基于委托的封装,它提供了一种发布/订阅模式,使得在某些特定情况下可以触发一系列操作。事件通常用于在对象内部发生某些变化时通知外部对象。定义事件的基本语法类似于定义委托,但是事件定义通常是在类中,并且需要使用event关键字来声明。// 定义一个委托类型// 定义事件// 定义事件// 触发事件= null) 阅读详情

一、值传(value),引用传(ref,out)

我们知道值传递其实就是在函数内部copy了一个参数的副本,而引用传递传递的是实参的地址。

ref和out区别是什么呢?ref可进可出,out只出不进。参数标记为ref的,在调用之前必须初始化,out不需要初始化,但是在返回时必须进行赋值。

在同一个类中不能对ref和out同时进行重载。可以和普通值传递进行重载。

二、params可变参数

参数个数不固定情况下

1、如果有几种类型的参数,则params修饰的必须放到最后

形式为:方法修饰符 返回类型 方法名(params 类型[] 变量名)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        public static void swap1(int a, int b)
        {
            int temp = a;
            a = b;
            b = temp;

        }

        public static void swap1(ref int a, ref int b)
        {
            int temp = a;
            a = b;
            b = temp;
        }
        //不能这样,否则会提示无法重载的错误
        //public static void swap1(out int a, out int b)
        //{
        //    int temp = a;
        //    a = b;
        //    b = temp;
        //}
        public static void swap2(out int a, out int b)
        {
            //Console.WriteLine(">>>>a=" + a + ">>>b=" + b);//没有赋值不能使用
            a = 3;
            b = 4;
        }

        //可变参数
        public static int add(params int[] list)
        {
            int sum = 0;
            foreach (int i in list)
            {
                sum += i;
            }
            return sum;
        }

        static void Main(string[] args)
        {
            int a = 1, b = 2;//必须初始化,否则ref会报错
            //int a, b;
            Console.WriteLine(">>>>a="+a+">>>b="+b);

            swap1(a,b);

            Console.WriteLine(">>>>a=" + a + ">>>b=" + b);

            swap1(ref a, ref b);//必须明确为ref

            Console.WriteLine(">>>>a=" + a + ">>>b=" + b);

            swap2(out a,out b);//必须明确为out

            Console.WriteLine(">>>>a=" + a + ">>>b=" + b);

            int[] arrs = { 1,2,3,4,5};

            int sum=add(arrs);

            Console.WriteLine(">>>>>sum="+sum);

            Console.WriteLine("按任意键退出....");

            Console.ReadKey(false);

        }
    }
}


C#的几种数据传递类型 C#的几种数据传递类型,供大家学习参考使用 立即下载

相关推荐

芯片设计新手必看:5分钟搞懂工艺角(Process Corner)到底是什么,为啥仿真总要用它?

本文详细解析了芯片设计中的工艺角(Process Corner)概念及其在仿真中的重要性。通过类比马拉松运动员的性能差异,解释了晶体管制造过程中的天然波动,并介绍了TT/FF/SS等工艺角代码的含义。文章还探讨了为何需要跑全工艺角仿真,以及现代芯片验证的完整流程,包括PVT矩阵和多模式分析(MMMC),帮助芯片设计新手快速掌握这一关键概念。

weixin_28713947的博客 246

ZigBee技术解析:从协议栈到Mesh网络应用

ZigBee作为一种低功耗无线通信技术,基于IEEE 802.15.4标准构建,专为无线传感器网络(WSN)设计。其核心技术包括DSSS调制和Mesh网络拓扑,在2.4GHz、915MHz和868MHz频段工作,具有功耗低、成本优和抗干扰强的特点。ZigBee通过AODV路由协议实现自组织网络,支持多跳路由和动态路径优化,适用于智能家居和工业自动化场景。在智能家居中,ZigBee 3.0进一步统一了应用层,提升安全性和互操作性,成为物联网领域的重要解决方案。

weixin_30509393的博客 471

从工艺文件到寄生分析:手把手教你用华大九天RCExplorer做版图预检(附ITF文件解析)

本文详细介绍了华大九天RCExplorer工具在模拟IC和版图设计中的应用,从工艺文件解析到寄生参数提取的全流程。通过ITF文件的深度解析和实战案例,帮助工程师掌握金属层、介质层及通孔参数的关键影响,提升设计效率与准确性。文章还提供了与StarRC工作流集成的实用技巧,是国产EDA工具应用的权威指南。

weixin_42522552的博客 408

C#参数传递和属性

默认时,值类型是按值传递给方法的,也就是说当值对象传递方法时,方法中创建对象的一个临时副本,一旦方法完成,副本被丢弃。 C#提供了ref参数修饰符用于按引用把值对象传给方法,还有out修饰符用于不经过初始化就传递一个ref变量。 public class Time { // public accessor methods public void DisplayCurre

EIP的专栏 4067

自适应动态规划硕士博士论文学习

强化学习关注随机过程中的序贯决策问题,而自适应动态规划关注动态系统的控制问题。吸引域:系统渐近稳定的区域。

DarlingLSA的博客 1425

手把手教你用FPGA驱动DAC8830:一个Verilog SPI驱动模块的完整实现与调试

本文详细介绍了如何使用FPGA通过Verilog实现DAC8830的SPI驱动模块,包括SPI通信机制解析、Verilog模块设计、代码优化及调试技巧。重点解决时钟同步、状态机设计等工程实践问题,适用于音频处理、仪器仪表等高精度数模转换场景。

weixin_26886855的博客 230

C# 参数传递行为

参数传入函数的默认行为是按值传递,如果没有参数标记参数相关的修饰符,数据的副本就会被传入函数,到底复制什么取决于参数是值类型还是引用类型。 1. static int Add(int x, int y) { int ans = x + y; //数值数据(int)属于值类型,修改的是原始数据的副本 x =  11111; y = 22222; } 2. out修饰符:输出参数,

airushaonian 377

L298N电机驱动模块的接线使用与代码实现

#include "iostm8s208mb.h" #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; // 关于LED灯的宏定义 #define LED2 PI_ODR_ODR2 //输出量 #define LE

Clichong 13万+

初识c#---属性和参数传递

1.属性     作用:1.校验数据的合法性             2.保护内部字段不被破坏(封装性)             3.属性是为了拦截字段             4.属性是为了拦截字段在赋值的时候,做一些操作来保护字段的合法性            实际上属性就是特殊的方法,因为属性内部提供了两个构造器

龙丿行的博客 1314

SAP中常见的Debug方式

原文链接:https://mp.weixin.qq.com/s/wT4kThFKYV0PQYhCqpXRWg 大家可以关注我个人公众号,所有分享内容,会在公众号第一时间推送,且阅读排版更好。 愿大家的学习,轻松且愉快。 如果大家觉得有用,希望转发关注,谢谢 导读 SAP系统在企业的应用时,都不会只使用标准功能。 通常情况下,基于特殊的行业需求,以及某些业务部门的管理需求等,都会额外开发出一些增强,报表,对话功能,接口等,从而保证系统的正常运转。 标准知识的逻辑,我们...

Kerwin-G的博客 1万+

QDMA工程搭建/windows驱动编译与性能测试

请注意,根据您的目标操作系统,您可能需要在windows启动配置中启用测试签名的驱动程序,以便启用此驱动程序的安装。右键单击设备,选择更新驱动程序软件,然后选择构建的QDMA驱动程序的文件夹(通常为。创建一个新工程,在IP Catalog中搜索QDMA,双击创建qdma ip核。驱动程序安装安装驱动程序最简单的方法是通过Windows的“设备管理器”。如果系统提示未经验证的驱动程序发布者,请选择无论如何安装此驱动程序软件。本节主要介绍QDMA驱动在Windows系统的源文件、编译和安装过程。

qq_28455081的博客 2287

C#值传递、引用传递、输出传递详解

1、值传递 2、引用传递, 3、输出传递 4、ref 和 out 我们先来介绍一下形式参数(形参)和实际参数(实参)这两个概念: ,使用 return 语句可以从函数中返回一个值,但是使用输出传递则可以从函数中一次性返回多个值。

这个人好有趣....hh 4998

黑猫带你学Nand第11篇:万字长文带你了解NandFlash的数据保持原理及特性(Data Retention)

TATTAT:Trap-assistedtunneling,陷阱辅助隧穿,也有叫法称为电荷陷阱现象。这是一种物理现象,它发生在非挥发性存储器,如NAND闪存。在这种效应中,存储在闪存单元浮动栅极上的电荷(电子)由于隧道氧化物中捕获的电荷形成的电场影响,导致电荷通过隧道效应从一个能级隧穿到另一个能级,从而造成电荷泄漏。这种电荷泄漏是导致闪存数据保持问题的主要原因之一,因为它可以改变存储在闪存单元中的电荷量,进而改变其阈值电压水平,最终可能导致数据错误。在NANDFlash中,电荷被存储在浮置栅极上。

黑猫奥利奥的博客 1101

C#参数传递

C#的变量类型 值类型:值类型的变量就是数据本身,包括基本数据类型(int, float, char)、枚举(enum)和结构体(struct)。 引用类型:引用类型的变量指向数据的,是一个引用,而不是数据本身,包括类(Class)、委托(delegate)、接口(interface)和数组。 注意,变量的值类型、引用类型跟参数传递中的值传递、引用传递是不同的概念,下面讲解C#的参数传递。 ...

weixin_30471561的博客 221

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

全面解析C#中参数传递

全面解析C#中参数传递 一、引言   对于一些初学者(包括工作几年的人在内)来说,有时候对于方法之间的参数传递的问题感觉比较困惑的,因为之前在面试的过程也经常遇到参数传递的基础面试题,这样的面试题主要考察的开发人员基础是否扎实,对于C#中值类型和引用类型有没有深入的一个理解——这个说的理解并不是简单的对它们简单一个定义描述,而在于它们在内存中分布...

fgmah2000的博客 755

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C#进阶学习(九)委托的介绍

本文简单介绍了C#中委托的使用方法,以及系统给我们提供的委托

FAREWELL00075的博客 1302

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C#的参数传递

下面是我对于C#值传递和引用传递的理解,不当之处多多指点。简单来讲,无论哪种形式的参数传递,其实质都是传递的指针,也就是引用。区别在于引用指向的是堆还是栈,以及指向原数据的位置还是新的位置。如果变量是值类型,那么传递的就是指向栈的指针。如果变量是引用类型,那么传递的就是该对象在堆中存放位置的指针。那么,在实际coding中如何运用呢?我们可以将参数传递分为两种情况:一是允许被调

茫溪 960

C#方法参数赋值的问题值类型

C#中的值类型参数传递是复制传递,方法内修改形参不影响实参。示例代码演示了一个静态方法Sum(),接收两个int参数和一个运算符char参数,在方法内部修改num1和num2的值后进行四则运算。由于int是值类型,方法内对参数的修改不会影响调用处的原始变量。这体现了值类型参数传递时是复制副本的特性,与直接变量赋值的复制行为一致。

loel_Nov_16的博客 230

C++与C#对比学习:函数(一)C#参数传递存在的问题

函数可以把代码模块化,而且便于代码重复利用.继承自C++的C#,两者函数的用法大体差不多,不过的有些细小的差别.在整个C#的语法体系中对一些类型的检查相较C++更严,这样也减少了代码中可能潜在的错误. 函数是由返回值类型,函数名,参数列表,函数体四大部分组成. 我们知道每个变量都会取一个名字,在相同的作用域内不能定义两个相同名字的变量.函数自然也一样.不过区别函数不是只靠函数名,而是用函数名加...

爱.NET 349

【C#】C#中值类型和引用类型参数传递的区别

C#中参数传递分为值类型和引用类型两种机制。值类型传递变量的副本,方法内修改不影响原始变量;引用类型传递对象引用的副本,方法内修改对象属性会影响原始对象。使用ref关键字可让方法直接修改原始值类型参数。示例演示了类(引用类型)和结构体(值类型)的参数传递差异,以及替换引用和ref关键字的使用效果。总结:值类型默认传副本不影响原始对象,引用类型传引用副本会影响对象属性,替换引用不影响原始对象,ref关键字可修改原始值类型参数。

Z_W_H_的博客 435

值类型和引用类型及参数传递

值类型和引用类型: C#数据类型分为两大类:值类型和引用类型。 值类型数据主要有:结构体struct,枚举体enum,布尔型bool,浮点型,整型。 引用类型数据主要有:数组,字符串,接口,委托,类。 值类型和引用类型的区别:   引用类型继承自System.Object,值类型继承自System.ValueType。   引用类型保存到内存的堆heap中,值类型保存在内存的...

aq8008的博客 230

由几行代码浅析C#的方法参数传递

一.数据类型      如果各位已经了解了值类型和引用类型,第一部分可以跳过。     在了解方法参数之前,我们至少要知道参数都可分为什么样的参数,所以理解C#的数据类型非常重要。C#对其中可用的类型以及其定义有着非常严格的定义。C#的数据类型分为两种:     a. 值类型;     b. 引用类型;      顾名思义,从概念上将,值类型存储的是具体的数值,而引用类型存储的是值的引用

立雪三尺 1738

参数传递:值类型(value type)和引用类型(reference type)

【转自】http://hi.baidu.com/shoujiqifeila/blog/item/c11fce2240667cfbd7cae2da.html 公司面试试题7:请你谈谈C#中的参数传递:值类型(value type)和引用类型(reference type) 2009-04-16 11:22 摘要: 由于在.NET中存在两种类型,分别是值类型(value type)和引用类

liu_ben_qian的专栏 1268
上一篇: JAVA引用总结
下一篇: C# is和as关键字
itcolossus
博客等级 码龄20年 93粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值