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参数的更多相关文章

  1. axios中get请求的params参数中带数组的处理方法

    axios中get请求的params参数中带数组时导致向后台传参失败报错:from origin 'http://localhost:8080' has been blocked by CORS po ...

  2. C# 中out,ref,params参数的使用

    C#中有三个高级参数,分别是out,ref,params:   1.out参数 方法使用return 只能返回一个值(一个数值或一个指针值),out参数可以帮助我们在一个方法中返回多个值,不限类型. ...

  3. C# 方法的out、ref、params参数

    一.out参数实例 [实例]求一个数组中的最大值.最小值.总和.平均值 class Program { static void Main(string[] args) { //写一个方法 求一个数组中 ...

  4. C#中的ref与out参数(本文仅作为个人笔记)

    假如一个方法的参数(形参)是引用类型,那么使用那个参数来进行的任何修改都会改变参数引用的数据.但这里的关键在于,虽然引用的数据发生了变化,但参数本生没有改变——它仍然引用的是一个对象.换句话说,虽然可 ...

  5. 如何用java语言实现C#中的ref关键字(按引用传递参数)的效果

    https://www.cnblogs.com/nnngu/p/8300164.html

  6. c#.net中参数修饰符ref,out ,params解析

    params ============================================================================================= ...

  7. 基于params,ref,out的参数问题详解

    http://www.jb51.net/article/37967.htm 最近在写程序时遇到params,ref,out 参数问题.回头有自习看了看MSDN,才巩固了基础.现在和大家分享一下.par ...

  8. out参数,ref参数,params参数数组

    params参数数组 params关键字可以为方法指定数目可变的参数.params关键字修饰的参数,可以传入任意数目的同类型参数,甚至可以不传入参数. 不过params修饰的参数必须是方法的最后一个参 ...

  9. .net 中 ref out params的区别

    C#中有三个关键字-ref,out ,params,虽然本人不喜欢这三个关键字,因为它们疑似破坏面向对象特性.但是既然m$把融入在c#体系中,那么我们就来认识一下参数修饰符ref,out ,param ...

随机推荐

  1. ArcGIS 投影转换(AE)

    private void btnOK_Click(object sender, EventArgs e) { try { CheckError(); this.checkEdit1.Enabled = ...

  2. UIPickerView 简单操作和实际应用

    1.UIPickerView 选择指示器控件 //选择器的初始化 UIPickerView * pickerView = [[UIPickerView alloc] initWithFrame:CGR ...

  3. hibernate中session的获取使用以及其他注意事项

    hibernate中session的获取使用以及其他注意事项 前言:工作时,在同时使用Hibernate的getSession().getHibernateTemplate()获取Session后进行 ...

  4. BI跟报表一样吗?

    一.报表≠BI很多的人认为,报表就是BI.实际上,报表只是BI的一部分,虽然BI应用的结果通常需要通过报表来展示,但是,BI绝对不仅仅是报表.其实,大家对这些概念的理解,如同15年前的ERP一样.19 ...

  5. 剑指Offer30 从1到n整数出现1的个数

    /************************************************************************* > File Name: 30_NumerO ...

  6. codeforces 680B B. Bear and Finding Criminals(水题)

    题目链接: B. Bear and Finding Criminals //#include <bits/stdc++.h> #include <vector> #includ ...

  7. CSS - 实现文字显示过长时用省略

    一.添加-文字显示超出范围时隐藏属性 overflow:hidden; 二.添加-超出文字省略号属性 text-overflow:ellipsis; 三.添加-文字不换行属性 white-space: ...

  8. 基于JQuery的渐隐渐现轮播

    <div id="ads"> <div> <!--轮播图片--> <ul> <li><a href="# ...

  9. 五.CSS盒子模型

    所谓盒模型,就是浏览器为每个HTML元素生成的矩形盒子.即HTML页面实际上就是由一系列盒子组成.这些盒子是按照可见版式在页面上排布的.并由三个属性进行控制:position属性,display属性, ...

  10. PAT1003——我要通过!

    “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. 得到“答案正确”的条件是: 1 ...