理解C#的Ref和Out关键字

类型介绍

在几乎所有的OOP语言中,都存在2种类型的值。

值类型 引用类型

以C#为例:其值类型为sbyte,byte,char,short,ushort,int,uint,long和ulong,float和double,当然还有decimal和bool。而引用类型则是string和object。

我想说的

我想说的就是——Ref和Out把我弄糊涂的原因是,当时没有认真的去分析它对不同类型所做出的不同的动作。

对于值类型。

使用了Ref和Out的效果就几乎和C中使用了指针变量一样。它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作。举个小例子:

using System;
namespace ConsoleApplication4
{
///
/// Class1 的摘要说明。
///
class Class1
{
///
/// 应用程序的主入口点。
///
[STAThread]
static void Main(string[] args)
{
int a = 5;
int b;
squareRef(ref a);
squareOut(out b);
Console.WriteLine("The a in the Main is: " + a);
Console.WriteLine("The b in the Main is: " + b);
}
static void squareRef(ref int x)
{
x = x * x;
Console.WriteLine("The x in the squareRef is: " + x);
}
static void squareOut(out int y)
{
y = 10;
y = y * y;
Console.WriteLine("The y in the squareOut is: " + y);
}
}
}

显示的结果就是——25 100 25 100。

这样的话,就达到了和C中的指针变量一样的作用。

时间: 2024-08-29 10:29:45

理解C#的Ref和Out关键字的相关文章

C#中按引用传递与按值传递的区别,以及ref与out关键字的用法详解

以下是对C#中按引用传递与按值传递的区别,以及ref与out关键字的用法进行了详细的分析介绍,需要的朋友可以过来参考下   复制代码 代码如下: /给三个整数从小到大排序并求和及其平均值 //其中,三个待求整数及其排序的结果由引用参数传递:其和由输出参数传递:平均值由返回值返回. //在Main()方法中实现三个待求整数的输入及结果的输出 //目的:定义方法:调用方法::理解形参和实参的引用传递关系:熟悉引用参数和输出参数的使用. using System; class Class1  {   

理解PHP5中static和const关键字

php5|关键字 PHP5中加入了很多面向对象的思想,PHP5的面向对象比较接近Java的面向对象思想.我们这里对PHP5中的static和const关键字作用进行一下描述,希望对学习PHP5的朋友有帮助. (1) staticstatic关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护.类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方

理解PHP5中static和const关键字的区别_php技巧

PHP5中加入了很多面向对象的思想,PHP5的面向对象比较接近Java的面向对象思想.我们这里对PHP5中的static和const关键字作用进行一下描述,希望对学习PHP5的朋友有帮助. (1) static static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护.类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类

解析.net中ref和out的实质

可能是.net中的value type和reference type的关系遇到给函数传递参数的情况时, 在我们的脑海里就会浮现按值和按引用传递的概念.如果看见下面这个函数(代码1)我 们就会条件反射似的说要给参数加上ref才能使函数内部修改参数的值. //代码1 void Change(int a, int b) { int tmp = a; a = b; b = tmp } ok,那继续看下面这个代码 //代码2 void Change2(object o) { o = new object(

浅谈async、await关键字 => 深谈async、await关键字

前言 之前写过有关异步的文章,对这方面一直比较弱,感觉还是不太理解,于是会花点时间去好好学习这一块,我们由浅入深,文中若有叙述不稳妥之处,还请批评指正. 话题 (1)是不是将方法用async关键字标识就是异步方法了呢? (2)是不是没有await关键字的存在async就没有存在的意义了呢? (3)用异步方法的条件是什么呢,为什么会有这个条件限制? (4)只能调用.NET Framework内置的用await标识的Task,能否自定义实现呢? (5)在lambda表达式中是否可以用async和aw

解密SEO:善拆词与组词更易彰显关键字价值

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 对于如何选择关键字有着不少的价值,然而大多也仅是"如何选择关键字",然而却忽视了实际运用中的"拆此与组词"的重要性.所以即使关键字选择得当,优化效果也较良好,但是最后往往致使了发展面过于"狭隘",纵然再努力的去做优化也得不到多少实质效果的提升.然而将关键字的适度拆分.重组,甚至排列位

asp.net数组 ref和out传递数组

asp教程.net数组 ref和out传递数组 与所有的out参数一样,在使用数组类型的out参数前必须先为其赋值,即必须由被调用方为其赋值 class testarraysclass {  static void main()  {   //declare and initialize an array   int[,] thearray = new int[5,10];   system.console.writeline("the array has {0} dimensions"

C# 中的 Out 和 Ref 及Params 参数

  out 和ref 参数 经常用来通过方法传递参数来获取值,当您的方法不只有一个返回值的时候,这两个参数就发挥作用了.ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点. 在这篇文章里,我将解释如何在c#应用中使用这两个参数. 1.out 参数 out 方法参数关键字使方法引用传递到方法的同一个变量.当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中. public class mathClass{public static int TestOut

在C#中通过P/Invoke调用Win32DLL

  我在自己最近的编程中注意到一个趋势,正是这个趋势才引出本月的专栏主题.最近,我在基于 Microsoft .Net Framework 的应用程序中完成了大量的 Win32 Interop.我并不是要说我的应用程序充满了自定义的 interop 代码,但有时我会在 .Net Framework 类库中碰到一些次要但又繁絮.不充分的内容,通过调用该 Windows API,可以快速减少这样的麻烦. 因此我认为,.Net Framework 1.0 或 1.1 版类库中存在任何 Windows