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(关键字 ...
随机推荐
- [转]怎么样快速入门AngularJS?
本文转自:http://www.ngnice.com/posts/205af1ea1e13d2 怎么样快速学习AngularJS? 相信很多初学者都有过或者类似的疑问,其实这个问题没有标准的答案,每个 ...
- [转]js add month 加n月
本文转自:http://stackoverflow.com/questions/5645058/how-to-add-months-to-a-date-in-javascript/5645126 I ...
- (转)python 列表与元组的操作简介
python 列表与元组的操作简介 原文:https://www.cnblogs.com/QG-whz/p/4782809.html 阅读目录 列表 list函数 列表的基本操作 列表方法 元组 tu ...
- Spring boot-(3) Spring Boot特性2
1. 外部配置 Spring Boot支持外部配置,以便可以在不同的环境中使用相同的应用程序代码.可以使用properties文件,YAML文件,环境变量或命令行参数进行外部配置.可以使用@Value ...
- http 中的缓存
如何判断缓存新鲜度 If-Modified-Since告诉服务器, 在服务器中的响应报文中有一个Last-Modified字段, 如果两者一直则表示在浏览器中缓存的文件是最新的, 可以直接使用浏览器缓 ...
- HDU 4355——Party All the Time——————【三分求最小和】
Party All the Time Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 让你分分钟学会 javascript 闭包
闭包,是 javascript 中重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它.因此,本文不会对闭包的概念进行大篇幅描述 ...
- HttpClient4.x工具获取如何使用
HttpClient4.x工具可以让我们输入url,就可以请求某个页面(个人感觉挺实用的,特别是封装在代码中) 首先我们需要在maven工程中添加依赖 <dependency> ...
- C语言中的重定向输入
所谓重定向输入,就是不用从键盘一组一组的输入数据,而是保存为一个文件,直接将该程序的测试数据进行输入即可:使用freopen()函数会将标准输入stdin重定向到文件input.txt(这个文件名自己 ...
- 如何领域驱动设计?-实践感悟&总结分享
主要是在开发过程中,个人对于领域驱动设计的实践感悟和总结:也是对新进开发人员的培训资料:希望对关注DDD的童鞋有所帮助. 概述 领域驱动不是纯粹的技术问题,领域建模(建立数据表只是一部分)是领域专家( ...