C# 方法中的参数类型
二、方法中的参数类型
1. 值参数
值参数是指不带修饰符只带数据类型的形参。
值参数在使用值向方法传递参数时,编译程序会把实参的值做一份拷贝,并且将此拷贝传递给该方法,被调用的方法不会修改内存中实参的值。
调用该方法时,系统会为每一个值类型的形参分配一个新的内存空间,然后将对应的实参的表达式运算的值复制到该内存空间中。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
static void Swap(int x, int y) // 定义值参数
{
int temp = x;
x = y;
y = temp;
}
static void Main(string[] args)
{
int i = 1, j = 2;
Console.WriteLine("调用Swap之前:a = {0}、b = {1}", i, j);
Swap(i, j);
Console.WriteLine("调用Swap之后:a = {0}、b = {1}", i, j);
Console.ReadLine();
}
}
}
运行结果:
调用Swap之前:a = 1、b = 2
调用Swap之后:a = 1、b = 2在调用Swap方法前后,实参变量i和j的值并没有交换,这说明在方法中更改参数的值不会影响到这个方法之外的变量。
2. 引用型参数
引用型参数是指带ref修饰符的形参。
当使用引用型参数向方法传递形参时,实际上传递的是指向原变量的指针,即引用参数和原变量保存的是同一个地址,这样,在方法中对参数所做的任何修改都会改变原变量的值。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
static void Swap(ref int x, ref int y) // 定义引用型参数
{
int temp = x;
x = y;
y = temp;
}
static void Main(string[] args)
{
int i = 1, j = 2;
Console.WriteLine("调用Swap之前:a = {0}、b = {1}", i, j);
Swap(ref i, ref j); // 调用Swap方法时,要对实参使用ref修饰符
Console.WriteLine("调用Swap之后:a = {0}、b = {1}", i, j);
Console.ReadLine();
}
}
}
运行结果:
调用Swap之前:a = 1、b = 2
调用Swap之后:a = 2、b = 1在调用Swap方法前后,实参变量i和j的值进行了交换,这说明在使用形参为引用型参数的方法中,改变参数的值会影响到这个方法之外的变量。
3. 输出参数
输出参数是指带out修饰符的形参。
out修饰符表示该引用参数是用于输出的,而且调用该参数时不需要对参数进行初始化。输出型参数用于传递方法返回的数据。
与引用型参数类似,输出型参数也不开辟新的内存空间。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
class classTest
{
private int a, b;
public classTest(int a, int b)
{
this.a = a;
this.b = b;
}
public int Myclass(out int c) // 输出参数
{
c = a * b; // out参数的返回值
return a + b; // 方法的返回值
}
}
static void Main(string[] args)
{
int d=3; // 也可以不赋值
int c=6; // 也可以不赋值
classTest classTest1 = new classTest(4, 5);
d = classTest1.Myclass(out c);
Console.WriteLine("执行方法得到的返回值:d = {0}",d);
Console.WriteLine("返回参数的值:c = {0}", c);
Console.ReadLine();
}
}
}
运行结果:
执行方法得到的返回值:d = 9
返回参数的值:c = 20使用out关键字可以根据需要返回多个值。其中d使用的是方法的返回值,而c使用的使用的是out参数的返回值。
4. 数组型参数
数组型参数是指带params修饰符的形参。
如果形参表中包含了数组型参数,则该数组型参数在列表中必须位于最后,而且它必须是一维数组类型,比如,类型string[]和string[][]都可以作为数组型参数,而string[,]则不能。
注意:数组型参数不能有ref和out修饰符。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
static string Message(string name, params string[] args) // args为形数数组
{
string msg = name;
for (int i = 0; i < args.Length; i++)
{
msg += " " + args[i];
}
return msg;
}
static void Main(string[] args)
{
Console.WriteLine(Message("LiPing")); // 不传值
Console.WriteLine(Message("LiPing", "Hi")); // 传一个值
Console.WriteLine(Message("LiPing", "Hi", "How are you?"));// 传多个值
Console.ReadLine();
}
}
}
运行结果:
LiPing
LiPing Hi
LiPing Hi How are you?
C# 方法中的参数类型的更多相关文章
- 如何将C++中的SOCKADDR_IN*参数类型转换成C#中的参数类型
将C++中的参数类型SOCKADDR_IN*映射为C#中的IntPtr参数类型的示例代码如下: IntPtr ptrSockaddr = new IntPtr(); //ip地址 sockaddr_i ...
- JAVA方法中的参数用final来修饰的原因
JAVA方法中的参数用final来修饰的原因 很多人都说在JAVA中用final来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,有的人认为是调用语句的 ...
- python-函数中的参数类型和可变参数解析
最近,在学习python,天天抱着廖雪峰的教材苦练,https://www.liaoxuefeng.com/ 但廖老毕竟是如此的才华盈溢,我这等小辈真是读起来教程都有些费力. 关于python-函数中 ...
- ajax 方法的使用以及方法中各参数的含义
由于近来经常在项目中使用 ajax 这个函数,在工作之余自己查找了相关的资料,并总结了 ajax 方法的使用,以及方法中各个参数的含义,供大家学习参考使用 type: 要求为String类型的参数,请 ...
- C++中的参数类型
C++中的参数类型 数组 数组是相同类型数据的集合.引入数组就不需要在程序中定义大量的变量,大大减少程序中变量的数量,使程序精炼,而且数组含义清楚,使用方便,明确地反映了数据间的联系.许多好的算法都与 ...
- java 重写你可以这么理解 因为 方法名和参数类型个数相同 所以这就是重写了 然后 因为是重写 所以 返回值必须相同
java 重写你可以这么理解 因为 方法名和参数类型个数相同 所以这就是重写了 然后 因为是重写 所以 返回值必须相同
- ArcEngine中IFeatureClass.Search(filter, Recycling)方法中Recycling参数的理解
转自 ArcEngine中IFeatureClass.Search(filter, Recycling)方法中Recycling参数的理解 ArcGIS Engine中总调用IFeatureCla ...
- spring mvc中的控制器方法中的参数从哪里传进来?
编写控制器方法的时候很奇怪,spring是怎么知道你控制器方法的参数类型,并且注入正确的对象呢? 比如下面这样 @RequestMapping(value="/register", ...
- Python中函数参数类型和参数绑定
参数类型 Python函数的参数类型一共有五种,分别是: POSITIONAL_OR_KEYWORD(位置参数或关键字参数) VAR_POSITIONAL(可变参数) KEYWORD_ONLY(关键字 ...
随机推荐
- pl/sql 如何配置连接远程一个或多个数据库
参考链接 https://blog.csdn.net/yy_love_my/article/details/45720277
- android 闹钟设置问题
Android开发中,alarmManager在5.0以上系统,启动时间设置无效的问题 做一个app,需要后台保持发送心跳包.由于锁屏后CPU休眠,导致心跳包线程被挂起,所以尝试使用alarmMana ...
- javascript实现移动端网页版阅读器
现在手机上的文本阅读app已经非常丰富,良好的阅读体验与海量的书库常常令我感到无比兴奋. 我想到8年前用一点几寸屏幕的mp3看电子书的情景,顿生一种淡淡的温馨.再久远一些,小的时候,我也经常和小伙伴们 ...
- 为什么CPU缓存会分为一级缓存L1、L2、L3?有什么意义?
https://baijiahao.baidu.com/s?id=1598811284058671259&wfr=spider&for=pc 简介:CPU缓存是CPU一个重要的组成部分 ...
- CentOS 6.5 & 7 的网络YUM源配置
中国科技大学CentOS 6.5的网络源 [base]name=CentOS-$releasever - Base#mirrorlist=http://mirrorlist.centos.org/?r ...
- [Silverlight]调用外部可执行程序
public void InvokeExternalExecutableApp() { if (Application.Current.HasElevatedPermissions) {using ( ...
- 在线编辑word文档 可保存到服务器
使用说明:该方法只在office xp 和 2003上 测试通过,2000及以下 版本没试. 注意:你要打开的服务器端的word文档要有写权限.iis要开起 web服务扩展中的webdav为允许 具体 ...
- GitKraken使用教程-基础部分(8)
9. 远程(Remote)仓库 1) 添加远程仓库 一般在本地新建仓库后,需要添加一个远程仓库用于push/pull代码.鼠标移至GitKraken左侧区域的REMOTE栏,点击 该栏右边出现的 按 ...
- [HZOI 2015]树黑白
[题目描述] 给定一棵树,要求维护以下操作: 1.M u 将u节点反色 2.Q u 查询u到所有黑色节点距离和 [输入格式] 第一行n,m 表示节点总数和操作次数 之后n-1行,每行u,v表示两个端点 ...
- vue学习中遇到的onchange、push、splice、forEach方法使用
最近在做vue的练习,发现有些js中的基础知识掌握的不牢,记录一下: 1.onchange事件:是在域的内容改变时发生,单选框与复选框改变后触发的事件. 2.push方法:向数组的末尾添加一个或多个元 ...