c#中的ref、out、params参数
out参数
与c++的引用的对比
out参数可以用来传递方法返回值,与c++中的引用有点像,但是还有有些不同:
- 调用方法的时候必须写out参数
- 调用方法之前必须先分配空间
- 调用方法之前不用先赋值.
- 必须在方法内部对out参数赋值;
下面自己实现一个tryparse函数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace out参数
{
class Program
{
public struct Mid
{
public int[] _num;
public string _name;
}
static void Main(string[] args)
{
//写一个方法,求一个数组中的最大值、最小值、总和、平均值。
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//将要返回的四个值,放到一个数组里返回;但是问题是数组是一组相同类型的数据,所以才能放到一个数组里面。
//如果不同类型的话,只能从参数返回了.这时候又可以用结构封装起来返回;但是这个结构不一定是有意义的,同时是需要做后续操作的.
// Mid mid = GetMaxMinSumAvg(numbers);
// Console.WriteLine("名字是{0}",mid._name);
int max, min, sum;
double avg;
GetTest(numbers, out max, out min, out sum,out avg);
Console.WriteLine("最大值是{0},最小值是{1},总和为{2},平均值为{3}",max,min,sum,avg);
Console.ReadKey();
}
/// <summary>
/// 计算一个整数数组的最大值,最小值,平均值,总和,平均值;
/// </summary>
/// <param name="nums">需要计算的那个数组</param>
/// <param name="max">多余返回的最大值</param>
/// <param name="min">多余返回的最小值</param>
/// <param name="sum">对于返回的总和</param>
/// <param name="avg">多余返回的平均值</param>
public static void GetTest(int []nums,out int max,out int min,out int sum,out double avg)
{
//必须在方法内部对out参数赋值;
max = nums[0];
min = nums[0];
sum = nums[0];
for (int i = 1; i < nums.Length; i++)
{
if (nums[i]>max)
{
max = nums[i];
}
if (nums[i]<min)
{
min = nums[i];
}
sum += nums[i];
}
avg = sum * 0.1 / nums.Length;
}
/// <summary>
/// 自己实现一个int型的TryParse()函数;
/// </summary>
/// <param name="str"></param>
/// <param name="num"></param>
/// <returns></returns>
public static bool MyTryParse(string str,out int num)
{
try
{
num = int.Parse(str);
}
catch (OverflowException)
{
num = 0;
return false;
}
return true;
}
}
}
ref参数
ref就相当于c++中的引用;比out要更像一点,看它就像是reference的缩写;
注意三点:
- 在调用方法前一定要赋值;
- 调用时一定要写ref;
- 一定要构造空间
下面写一个交换两个变量内容的操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//ref就相当于c++中的引用;比out要更像一点,out专注返回20年;
namespace ref参数
{
class Program
{
static void Main(string[] args)
{
int n1 = 10;
int n2 = 20;
//注意两点;在调用方法前一定要赋值;一定要写ref;一定要构造空间
Exchange(ref n1, ref n2);
Console.WriteLine("交换后,第一个变量是{0},第二个参数是{1}",n1,n2);
Console.ReadKey();
}
/// <summary>
/// 交换两个变量
/// </summary>
/// <param name="n1">第一个变量</param>
/// <param name="n2">第二个变量</param>
public static void Exchange(ref int n1,ref int n2)
{
n1 = n1 - n2;
n2 = n1 + n2;
n1 = n2 - n1;
}
}
}
params参数
params是可变类型参数,但是它与c++中的变长参数又有不同:
- 将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。
- params可变参数必须是形参列表中的最后一个元素。
- 唯一性:在一个函数里,只能有一个params可变参数
- 调用时有两种传递方式:数组和直接数据传;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Params参数
{
class Program
{
static void Main(string[] args)
{
int [] a={1,2,3};
Test("呵呵",a);
}
public static void Test(string name,params int[] par)
{
}
}
}
/*
* param可变参数 可以没有
* 唯一性
* 最后性
* 两种传递方式
* 求任意长度数组的最大值;
*
*/
c#中的ref、out、params参数的更多相关文章
- axios中get请求的params参数中带数组的处理方法
axios中get请求的params参数中带数组时导致向后台传参失败报错:from origin 'http://localhost:8080' has been blocked by CORS po ...
- C# 中out,ref,params参数的使用
C#中有三个高级参数,分别是out,ref,params: 1.out参数 方法使用return 只能返回一个值(一个数值或一个指针值),out参数可以帮助我们在一个方法中返回多个值,不限类型. ...
- C# 方法的out、ref、params参数
一.out参数实例 [实例]求一个数组中的最大值.最小值.总和.平均值 class Program { static void Main(string[] args) { //写一个方法 求一个数组中 ...
- C#中的ref与out参数(本文仅作为个人笔记)
假如一个方法的参数(形参)是引用类型,那么使用那个参数来进行的任何修改都会改变参数引用的数据.但这里的关键在于,虽然引用的数据发生了变化,但参数本生没有改变——它仍然引用的是一个对象.换句话说,虽然可 ...
- 如何用java语言实现C#中的ref关键字(按引用传递参数)的效果
https://www.cnblogs.com/nnngu/p/8300164.html
- c#.net中参数修饰符ref,out ,params解析
params ============================================================================================= ...
- 基于params,ref,out的参数问题详解
http://www.jb51.net/article/37967.htm 最近在写程序时遇到params,ref,out 参数问题.回头有自习看了看MSDN,才巩固了基础.现在和大家分享一下.par ...
- out参数,ref参数,params参数数组
params参数数组 params关键字可以为方法指定数目可变的参数.params关键字修饰的参数,可以传入任意数目的同类型参数,甚至可以不传入参数. 不过params修饰的参数必须是方法的最后一个参 ...
- .net 中 ref out params的区别
C#中有三个关键字-ref,out ,params,虽然本人不喜欢这三个关键字,因为它们疑似破坏面向对象特性.但是既然m$把融入在c#体系中,那么我们就来认识一下参数修饰符ref,out ,param ...
随机推荐
- 【Linux/Ubuntu学习5】Ubuntu 下android 开发,eclipse不能识别手机
ubuntu下eclipse不能识别手机解决方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1) 在终端运行 lsusb 会发现结果 ...
- XML 命名空间
XML 命名空间 一.XML命名冲突 在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突. 这个 XML 文档携带着某个表格中的信息: <table& ...
- 转载:Character data is represented incorrectly when the code page of the client computer differs from the code page of the database in SQL Server 2005
https://support.microsoft.com/en-us/kb/904803 Character data is represented incorrectly when the cod ...
- org.springframework.dao.InvalidDataAccessApiUsageException:The given object has a null identifi的解决方案
异常信息: org.springframework.dao.InvalidDataAccessApiUsageException: The given object has a null identi ...
- 业务系统的JVM启动参数推荐
关键业务系统的JVM启动参数推荐,原文链接请参见:http://calvin1978.blogcn.com/articles/jvmoption-2.html
- Javascript -- toFixed()函数
Javascript——toFiexed()函数 1. toFixed(n) 限制小数点后位数,四舍五入.n:0~20 . 2. 作用对象必须是number,不能为其他类型.如(8.001).toFi ...
- CentOS 7 minimal 版本安装后网络配置
本博文主要为你讲解如何再CentOS 7中启用网络. 1.首先使用root登录服务器,输入 nmcli d 我们发现网卡是处于禁用状态. 2.打开网络管理器界面,再终端输入 nmtui 打开界面如上, ...
- 【转】ASP.NET 高效分页存储过程
代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-- ...
- 兼容性调试-- 在谷歌浏览器中,td 设置colspan的失效的问题
通过设置table width="100%"table-layout="fixed" 解决
- Top 10 Programming Fonts
Top 10 Programming Fonts Sunday, 17 May 2009 • Permalink Update: This post was written back in 2009, ...