ref in out params

参数类型可以分为ref、in、out这三种,默认的都是in。

通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:

1、把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数。在函数使用out参数时,必须把它看成是尚未赋值,调用代码可以把已赋值的变量用作out参数,但存储在该变量中的值会在函数执行时丢失。

以下是关于out使用的一个示例

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

namespace ch5t05
{
    class Program
    {
        static int MaxValue(int[] intArray, out int maxIndex)
        {
            int maxVal=intArray[0];
            maxIndex = 0;
            for (int i = 1; i < intArray.Length; i++)
            {
                if (intArray[i] > maxVal)
                {
                    maxVal=intArray[i];
                    maxIndex = i;
                }
            }
            return maxVal;
        }
        static void Main(string[] args)
        {
            int[] myArray = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 };
            int maxIndex;
            Console.WriteLine("The maxium value in myArray is {0}",MaxValue(myArray,out maxIndex));
            Console.WriteLine("The first occurance of this value is at element{0}",maxIndex+1);
            Console.ReadKey();
        }
    }
}

2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。

3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。不必初始化作为 out 参数传递的变量。但必须在方法返回之前为 out 参数赋值。

params:

一个函数中只能一个参数带params关键字;带params关键字的参数必须是最后一个参数;带params关键字的参数必须是一维数组。在调用的时候可以不给他传值,也可以给他传值,还可以给他传多个值。

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

namespace ch0501
{
    class Program
    {
        static string test(String name,params String[] words)
        {
            String msg=name;
            foreach(String word in words)
            {
                msg+=word;
            }
            return msg;
        }
        static void Main(string[] args)
        {
            Console.WriteLine(test("liming"," how are you"));
            Console.WriteLine(test("lili", " a girl", " a boy"));
            Console.WriteLine(test("shasha"));
            Console.ReadKey();
        }
    }
}
时间: 2024-11-05 15:55:23

ref in out params的相关文章

浅谈c#的三个高级参数ref out 和Params

c#的三个高级参数ref out 和Params 前言:在我们学习c#基础的时候,我们会学习到c#的三个高级的参数,分别是out .ref 和Params,在这里我们来分别的讲解一下,在这里的我们先不做具体的解释,我会通过几个例子来做分别的解释. 一:out参数  1.首先我先给大家一个题:我们来写一个方法,来求一个数组中的最大值,最小值,总和,平均值.代码如下:  int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };  通过分析我们会发现如果我们写一个方

out参数,ref参数,params参数数组

params参数数组 params关键字可以为方法指定数目可变的参数.params关键字修饰的参数,可以传入任意数目的同类型参数,甚至可以不传入参数. 不过params修饰的参数必须是方法的最后一个参数,并且一个方法只能有一个params修饰的参数. 示例 public class MyClass { public static void UseParams(params int[] list) { for (int i = 0; i < list.Length; i++) { Console.

out参数,ref参数,params参数

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace _07out参数 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //写一个方法 求一个数组中的最大值.最小值.总和.平均值 14

Break 、Continue 和ReadOnly、Const和Ref和Out params

Break和Continue区别 之前对于Break和Continue:ReadOnly和Const:ref和out,params之类的基础东东学习过,但是一直没有仔细去研究到底是怎么一回事儿,最近在开发中用到了,仔细来做个总结: 1.Break和Continue //break是跳出整个循环体,不再执行本循环,continue是结束单次循环,继续下一次循环. //更多问题 联系QQ 931697811(夜雨梧桐) 1 #region Break测试 2 3 Console.WriteLine(

C# 用params定义一维参数数组

参数数组,通过关键字params定义参数数组,params类型参数主要用于在对数组长度未知(可变)的情况下进行函数声明,调用时可以传入个数不同的实参,具备很好的灵活性. 首先给出一个具体的例子介绍参数数组(params)的具体用法: 例①: static void Main(string[] args) {     T('s', 'a', 'g', 'e', 'w', 'q');  //错误提示:T方法没有采用6个参数的重载     T(new object[] { 'a', 'g' ,1,"小

参数数组(params)的用法

使用参数数组的注意事项: 1. 只能在一维数组上使用params关键字. 2. 不能重载一个只基于params关键字的方法.params关键字不构成方法的签名的一部分. 如: //编译时错误:重复访问 public static int Min(int [] paramList) ............. public static int Min(params int [] paramList) ............. 3. 不允许ref或out params数组 //编译时错误 pub

跟着杨中科循序渐进学习wpf(全)

第一季 C#编程基础 1.用C#编写一个10+20=?的小程序: public static voidMain(tring[] args) { int i1=10; int i2=20; int i3=i1+i2; Console.WriteLine(i3);           //也可用占位符来实现:Console.WriteLine("{0}+{1}={2}",i1,i2,i1+i2);在输出参数较多时候要用占位符 Console.ReadKey();             

C#关键字学习

第一部分 一.访问关键字:base,thisbase:访问基类的成员,用于从派生类中访问基类的成员, 1.调用基类上已经被重写的方法. 2.指定创建派生类实例时应调用的基类构造函数. (对基类的访问只能在派生类的构造函数实例的方法和实例的属性访问器中)   属性访问器:get,set函数.不能在静态方法中使用base关键字. 例: 在子类的方法中写 base.GetInfo();调用基类的方法. 基类中的构造函数重载了,Mybase()和Mybase(int i); 在子类的构造函数中publi

c# 基础之方法

方法:方法其实就是函数(Function),优点就是方便重复使用,使代码简洁. 方法参数分: 1)值参数,不含修饰符 2)引用参数,以ref修饰符声明 3)输出参数,以out修饰符声明 4)数组型参数,以params声明 最长用的语法格式: //语法:[访问修饰符] 返回值 方法名(参数1,参数2) public static int NewMethod(int a,int b) { return a > b ? a : b; //max } 1.  值传递:   值传递是方法默认的参数类型,采