`
pleasetojava
  • 浏览: 744104 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

C#中ref、out及特殊说明参数的用法

阅读更多
1.out参数的用法。

usingSystem;
classTestOut
...{
staticpublicvoidFillArray(outint[]myArray)
...{
//初始化数组(必须):
myArray=newint[5]...{1,2,3,4,5};
}


staticpublicvoidMain()
...{
int[]myArray;//初始化数组(不是必须的!)

//传递数组给(使用out方式的)调用方:
FillArray(outmyArray);

//显示数组元素
Console.WriteLine("数组元素是:");
for(inti=0;i<myArray.Length;i++)
Console.WriteLine(myArray[i]);
}

}

2.ref参数的基本用法,相当于c里面的指针。


usingSystem;
classTestRef
...{
publicstaticvoidFillArray(refint[]arr)
...{
//根据需要创建一新的数组(不是必须的)
if(arr==null)
arr
=newint[10];
//否则填充数组,就可以了
arr[0]=123;
arr[
4]=1024;
}


staticpublicvoidMain()
...{
//初始化数组:
int[]myArray=...{1,2,3,4,5};

//使用ref传递数组:
FillArray(refmyArray);

//显示更新后的数组元素:
Console.WriteLine("数组元素是:");
for(inti=0;i<myArray.Length;i++)
Console.WriteLine(myArray[i]);
}

}


3.有ref与无ref的比较。


usingSystem;
publicclassMyClass
...{
publicstaticvoidTestRef(refchari)
...{
//Thevalueofiwillbechangedinthecallingmethod
i='b';
}


publicstaticvoidTestNoRef(chari)
...{
//Thevalueofiwillbeunchangedinthecallingmethod
i='c';
}




//Thismethodpassesavariableasarefparameter;thevalueofthe
//variableischangedaftercontrolpassesbacktothismethod.
//Thesamevariableispassedasavalueparameter;thevalueofthe
//variableisunchangedaftercontrolispassedbacktothismethod.
publicstaticvoidMain()
...{
chari='a';//variablemustbeinitialized
TestRef(refi);//theargmustbepassedasref
Console.WriteLine(i);
i
='a';
TestNoRef(i);
Console.WriteLine(i);

}

}


4.此处应用了类,注意类是引用类型,直接进行引用,除非在函数内生成新的类。



usingSystem;
//----------------------------------------
//MyClassdefinition
publicclassMyClass
...{
publicintValue;



//----------------------------------------
//Testermethods
publicstaticvoidTestRef(refMyClassm)
...{
m.Value
=10;
}


publicstaticvoidTestNoRef(MyClassm)
...{
m.Value
=20;
}


publicstaticvoidTestCreateRef(refMyClassm)
...{
m
=newMyClass();
m.Value
=100;
}


publicstaticvoidTestCreateNoRef(MyClassm)
...{
m
=newMyClass();
m.Value
=200;
}


publicstaticvoidMain()
...{
MyClassm
=newMyClass();
m.Value
=1;

TestRef(
refm);
Console.WriteLine(m.Value);

TestNoRef(m);
Console.WriteLine(m.Value);

TestCreateRef(
refm);
Console.WriteLine(m.Value);

TestCreateNoRef(m);
Console.WriteLine(m.Value);
}

}


5.ref,out,与无参参数的比较。


usingSystem;
classTestApp
...{
staticvoidoutTest(outintx,outinty)
...{//离开这个函数前,必须对x和y赋值,否则会报错。
//y=x;
//上面这行会报错,因为使用了out后,x和y都清空了,需要重新赋值,即使调用函数前赋过值也不行
x=1;
y
=2;
}

staticvoidrefTest(refintx,refinty)
...{
x
=1;
y
=x;
}



staticvoidnoRefTest(intx,inty)
...{
x
=8;
y
=x;
}




publicstaticvoidMain()
...{
//outtest
inta,b;
//out使用前,变量可以不赋值
outTest(outa,outb);
Console.WriteLine(
"a={0};b={1}",a,b);
intc=11,d=22;
outTest(
outc,outd);
Console.WriteLine(
"c={0};d={1}",c,d);

//reftest
//intm,n;
//refTest(refm,refn);
//上面这行会出错,ref使用前,变量必须赋值

into=11,p=22;
refTest(
refo,refp);
Console.WriteLine(
"o={0};p={1}",o,p);

intli=99,zong=89;
noRefTest(li,zong);
Console.WriteLine(
"{0},{1}",li,zong);



}

}

































分享到:
评论

相关推荐

    c#中ref和out用法

    在C#编程语言中,`ref`和`out`是两个关键字,它们都用于方法参数传递,但有各自独特的用途和规则。理解并熟练运用`ref`和`out`是提高C#编程效率的关键。 首先,`ref`关键字用于当需要在方法内部修改传入的参数值,...

    C#中ref,out和params有什么区别

    下面给出一个具体的示例来说明`ref`、`out`和`params`的使用方法: ```csharp public class A { public void Function(ref string pcRef) { // 修改pcRef的值 pcRef = "这是一个string"; } } public class B ...

    C# ref和out的区别

    综上所述,`ref`和`out`关键字在C#中的使用提供了灵活的方式来处理参数传递,特别是在需要直接操作外部变量或返回多个值的情况下。正确理解和应用这些关键字,能够极大地提高程序的效率和可维护性。

    C#中的参数传递 - ref, out比较

    本文将深入解析C#中涉及的几种关键参数传递机制:值类型的基本传递、`ref`关键字以及`out`关键字,并通过具体示例来说明这些传递方式的区别及应用场景。 ### 值类型的参数传递 在C#中,当我们将一个值类型(如基本...

    C#中out参数、ref参数与值参数的用法及区别

    C#中out参数、ref参数与值参数的用法及区别 C# 中的参数类型有四种:值参数、ref 参数、out 参数和 params 参数。今天,我们将详细介绍 C# 中的 out 参数、ref 参数和值参数的用法及区别。 值参数 -------- 在...

    C#中ref与out语法的使用

    在C#编程语言中,`ref`和`out`关键字是两种特殊的参数传递方式,它们允许函数修改调用者提供的变量的值。虽然这两种关键字在功能上有些相似,但它们的使用场景和语法规则有所不同。本文将深入探讨`ref`和`out`的用法...

    in.ref.out C#传值调用与引用调用

    本文将详细介绍C#中的三种参数传递方式:`in`、`ref` 和 `out`。 #### in 关键字(值传递) `in` 关键字用于声明只读的方法参数。当使用 `in` 传递参数时,实际上是传递了一个只读的副本,这意味着在方法内部无法...

    C#中关键字ref与out的区别

    例如,在一个方法中,我们可以使用ref关键字来传递多个参数,然后在方法中对这些参数进行修改,最后,回到调用方法后,输出这些参数的值,我们可以发现这些参数的值已经被修改。 在我们看一个简单的例子中,可以...

    (搜集整理的)C_中ref和out用法

    在C#编程中,`ref`和`out`关键字是用来处理方法参数的特殊方式,它们允许函数修改调用者提供的变量。虽然这两种关键字在某些方面很相似,但也存在关键的区别。 `ref`关键字: 1. `ref`参数要求在传递到方法之前必须...

    c#学习体会使用 ref 和 out 传递数组

    在C#语言中,`ref`和`out`是两个非常重要的关键字,它们主要用于处理函数参数的传递方式。通常情况下,在C#中调用方法时,参数是以值传递的方式进行的,也就是说,方法内的参数改变不会影响到方法外的原始变量。然而...

    c#下的各种参数的详细说明与用法

    在C#编程语言中,参数是函数或方法的一部分,用于传递数据给函数执行特定操作。本文将详细讨论四种主要的参数类型:值类型参数、引用类型参数、输出参数和数组型参数。 1. 值类型参数: 值类型参数是最常见的参数...

    C#中out与ref的区别实例解析

    本文实例讲述了C#中Out与Ref的区别,可以加深C#程序设计人员对Out和Ref用法的理解,具体分析如下: 一、区别分析: Out和Ref作为参数传递到方法体中,所传递的都是引用地址,两者在操作上本身没有区别。 但Out传递到...

    .NET/C#利用反射调用含ref或out参数的方法示例代码

    在本文中,我们将深入探讨如何利用反射调用包含`ref`和`out`参数的方法。 首先,理解`ref`和`out`关键字在C#中的作用至关重要。`ref`和`out`都是用来传递参数的方式,它们使得方法能够修改传递进来的变量的值。`ref...

    Ref和Out参数的例子

    3. 返回值:`Ref`参数通常用于已经知道初始值并且需要在方法中改变的场景,而`Out`参数则用于方法可能不使用调用者提供的初始值,而是提供一个新值的情况。 总结来说,`Ref`和`Out`参数都是为了在方法之间传递和...

    C#方法中参数ref和out详解

    C#方法中参数ref和out详解 C# 方法中参数类型有四种,分别是值参数、引用参数、输出参数和参数数组。本文将详细介绍 C# 方法中参数 ref 和 out 的相关资料,并对其进行详细的比较和对照。 一、值参数 在 C# 方法...

    ref和out传值

    - **使用场景**:当需要在方法中修改原始变量的值,并希望这个改变在方法调用后仍然有效时,可以使用 `ref`。 - **语法**:在方法声明和调用时都需要使用 `ref` 关键字。 3. **out 关键字**: - **作用**:`out`...

    C#调用DLL中非托管C++函数参数类型对照

    * 一维数组:C#参数在基本类型前加ref或out,out表示有返回数据。例如调用C++的f(float[] a),在C#中,为f(ref a)。 * 数据结构:C++中的struct SAMPLE_DATA { byte SampleID[255]; float Value[6]; } 在C#中对应...

    C#中ref和out的区别浅析

    在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? MSDN:  ref 关键字使参数按引用传递。其效果是,当控制权...

    C#中ref和out参数使用时需要注意的问题

    `out`参数主要用于从方法中返回多个值,而不需要创建复杂的类结构或使用数组。例如: ```csharp public void MathRoutines(double x, out double half, out double squared, out double cubed) { half = x / 2; ...

Global site tag (gtag.js) - Google Analytics