c# ref和out参数】的更多相关文章

转载:http://www.cnblogs.com/vd630/p/4601919.html#top 按引用传递的参数算是C#与很多其他语言相比的一大特色,想要深入理解这一概念应该说不是一件容易的事,再把值类型和引用类型给参杂进来的话就变得更加让人头晕了. 经常看到有人把按引用传递和引用类型混为一谈,让我有点不吐不快.再加上前两天碰到的一个有意思的问题,让我更加觉得应该整理整理关于ref和out的内容了. 一.什么是按引用传递 ref和out用起来还是非常简单的,就是在普通的按值传递的参数前加个…
首先,如果不使用这两个关键字,那是什么样 呢? 看下面的例子: using System;   class Test   {   static void Swap(ref int x, ref int y)   {   int temp = x;   x = y;   y = temp;   }   static void Swap(int x,int y)   {   int temp = x;   x = y;   y = temp;   }   static void Main()   {…
转自:http://www.68idc.cn/help/buildlang/ask/20150318283817.html 项目中如下的泛型方法,因为要在运行时,动态指定类型参数,所以要利用反射来实现. public static TR Deserialize<TR>(byte[] source, ref int offset) 一般做法如下: // 变量 type是该方法所在类型的运行时Type // model是已经定义的实例 MethodInfo genericMethod = type…
http://www.jb51.net/article/37967.htm 最近在写程序时遇到params,ref,out 参数问题.回头有自习看了看MSDN,才巩固了基础.现在和大家分享一下.paramsparams 关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力,它在只能出现一次并且不能在其后再有参数定义(之前可以).示例: 复制代码代码如下: using System;using System.Collections.Generic;using System.Text;…
ref out 相似 ref和out两个关键字的作用大致相同,但是有一些微妙但是重要的区别. 两者的行为相似到连编译器都认为这两者不能被重载:public void SampleMethod(out int i) { }public void SampleMethod(ref int i) { }以上重载在编译时将被抛出一个错误,编译器认为out和ref是同样的行为,但是事实上在行为上他们有区别. 共同点 两者的值在调用函数中被修改后都会影响到原始值. 区别 ref一定要初始化,out不需要 因…
假如一个方法的参数(形参)是引用类型,那么使用那个参数来进行的任何修改都会改变参数引用的数据.但这里的关键在于,虽然引用的数据发生了变化,但参数本生没有改变——它仍然引用的是一个对象.换句话说,虽然可以通过参数来修改实参引用的对象,但是不可能修改实参本身.这个时候就需要ref和out参数. ref参数:实参中的ref参数必须先初始化,否则编译出错 using System.Text; namespace RefAndOutParam { class Program { static void T…
一.原来函数这样传参 先看一个函数和函数调用. static void Main(string[] args) { ; Test(num);//局部变量在使用之前赋值 //Test(10); //直接为局部变量赋值 } static void Test(int i)//i 相当于一个局部变量 { i++; } Test函数定义了一个int 类型的变量i作为参数,这个地方相当于声明了一个局部变量,而局部变量使用之前必须赋值,这就是为什么函数使用的时候要赋值(传一个值进去). 假如不想给参数赋值怎么…
java和C#非常相似,它们大部分的语法是一样的,但尽管如此,也有一些地方是不同的. 为了更好地学习java或C#,有必要分清它们两者到底在哪里不同. 我们这次要来探讨C#特有的ref.out参数. java代码: public class HelloWorld { public static int n1=10; public static int n2=20; public static void main(String[] args) { System.out.println("n1:&q…
引例: 先看这个源码,函数传递后由于传递的是副本所以真正的值并没有改变. 源码如下: using System; using System.Collections.Generic; using System.Text; namespace refout参数学习 { class Program { static void Main(string[] args) { ; IncAge(age); Console.WriteLine(age);//打印结果还是20 Console.ReadKey();…
静态方法 调用:如果你写的方法和Main()方法在同一个类中,直接写方法名. 如果不在一个类中,需要类名.方法名(); 非静态方法: 调用:创建一个类的对象  对象名.方法名(); Person per=new Person(); per.Speak(); 返回值 参数 重载:方法名相同,如果参数的个数相同,那么类型就不能相同,如果参数的类型相同,那么个数就不能相同. Public int GetMaxer(int a,int b) {int maxer=0; If(a>b){ maxer=a;…