c#关键字及ref和out】的更多相关文章

关于这三个关键字之前可以研究一下原本的一些操作 using System; using System.Collections.Generic; using System.Text; namespace ParamsRefOut { class Program { static void ChangeValue(int i) { i=; Console.WriteLine("The ChangeValue method changed the value "+i.ToString());…
最近在写程序时遇到ref,out 参数问题.回头有自习看了看MSDN,才有巩固了基础.我把我的测试程序贴出来,大家分享一下.    ref 关键字使参数按引用传递.其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中.若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字.传递到 ref 参数的参数必须最先初始化.这与 out 不同,后者的参数在传递之前不需要显式初始化.这是out与ref的却别所在.     有点像,c++中的函数传递引用,和传递值…
首先我们要知道ref和out在C#里面是什么? 答:它们俩是C#里面的关键字. 他们俩是干啥的呢? 答:他们俩是方法参数的修饰符号,一但使用,方法定义和方法都用都要使用这个关键字,这一点是死规定. 好了废话不多说,既然是修饰符,使用了他们一定是要有意义的对吧.我们先来看一手微软官方定义. 如果大家通过上面微软官方的定义明白了这个参数.那很好,下面的我写的就不需要看啦!还有疑惑就继续往下看.保证你能懂. 这里我先不直接讲解,我先掏出一手代码,然后通过代码讲解. using System; usin…
相同点:既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量.简单的说就是:两者都是按地址传递的,使用后都将改变原来的数值. 不同点:1.使用ref型参数时,传入的参数必须先被初始化.对out而言,不必初始化作为 out 参数传递的变量, 但是必须在 out 所定义的方法中对其初始化,在方法返回之前为 out 参数赋值. 2.使用r…
一. 综述(本文内容大部分来自网络,经本人整理而成,仅供学习参考,不免理解错误,欢迎批评指正) 在c#中,方法的参数传递有四种类型: (1) 传值参数(by value) 传值参数无需额外的修饰符.传值参数在方法调用过程中,如果改变了参数的值,那么传入方法的参数在方法调用完成以后并不因此而改变,而是保持原来传入的值.实际 上,传值参数传递的是调用参数的一份拷贝,因此在调用方法的过程中,即使改变了参数的值,也不会影响到实际传入的参数值,详见例程: (2) 传址参数(by reference) 传址…
REF关键字 ref 关键字会导致通过引用传递的参数,而不是值. 通过引用传递的效果是在方法中对参数的任何改变都会反映在调用方的基础参数中. 引用参数的值与基础参数变量的值始终是一样的. 不要将“通过引用传递”概念与“引用类型”概念相混淆. 这两个概念不同. 方法参数无论是值类型还是引用类型,都可通过 ref 进行修饰. 通过引用传递值类型时没有值类型装箱. 若要使用 ref 参数,方法定义和调用的方法必须显式使用关键字,ref. 例如: class RefExample { static vo…
一. using System; using System.Collection.Generic; using System.Text; namespace ParamsRefOut { class Program { static void ChangeValue(int i) { i=5; Console.WriteLine("The ChangeValue method changed the value "+i.ToString()); } static void Main(s…
首先我们要知道ref和out在C#里面是什么? 答:它们俩是C#里面的关键字. 他们俩是干啥的呢? 答:他们俩是方法参数的修饰符号,一但使用,方法定义和方法都用都要使用这个关键字,这一点是死规定. 好了废话不多说,既然是修饰符,使用了他们一定是要有意义的对吧.我们先来看一手微软官方定义. 如果大家通过上面微软官方的定义明白了这个参数.那很好,下面的我写的就不需要看啦!还有疑惑就继续往下看.保证你能懂. 这里我先不直接讲解,我先掏出一手代码,然后通过代码讲解. using System; usin…
这节讲三个小知识:索引器.ref.out. 索引器: 在一个类中,我们可以定义一个索引器,它可以让我们在外部像访问数组元素一样访问类的属性成员. 索引器的定义就像定义属性一样,只不过名称为this,后边接一个中括号声明索引类型,下面看示例代码: class MyIndexer { private int[] a = { 1, 2, 35, 6, 3, 7 }; //定义一个索引器 public int this[int x] { get { return A[x]; } } } 上述代码中有一个…
ref表示引用的意思,C#中它有多种用法,这里简单总结一下: 1.按引用传递参数 具体可见:C#中的值传递与引用传递(in.out.ref) 2.引用局部变量 引用局部变量指的是在变量声明时使用ref关键字(或者使用ref readonly表示未只读),表示这个变量是另一个变量的引用,而不是值对象的赋值,或者引用类型的地址,这个引用可以理解为一个别名,操作这个别名对象与操作原始对象无异! 引用局部变量声明时必须初始化,而初始化引用局部变量需要使用ref赋值运算符(= ref): var i =1…
在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量.它们的区别是: 1.使用ref型参数时,传入的参数必须先被初始化.对out而言,必须在方法中对其完成初始化. 2.使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字.以满足匹配. 3.out适合用在需要retrun多个返回值的地方,而ref则用…
C#中有三个关键字-ref,out ,params,虽然本人不喜欢这三个关键字,因为它们疑似破坏面向对象特性.但是既然m$把融入在c#体系中,那么我们就来认识一下参数修饰符ref,out ,params吧,还有它们的区别. NO.1 params一个可以让方法(函数)的拥有可变参数的关键字. 原则:在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字. 示例(拷贝到vs2005中即可用,下面不再说明)public partial class…
out的使用 ————————————————————————————————————————————————— class Program    {        static void Main(string[] args)        { string tmp;    //先声明,但不初始化 User _user=new User(); _user.Name(out tmp);        //调用Name方法 Console.WriteLine("{0}",tmp); //…
转载原地址 http://www.cnblogs.com/gjahead/archive/2008/02/28/1084871.html ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量.它们的区别是: 1.使用ref型参数时,传入的参数必须先被初始化.对out而言,必须在方法中对其完成初始化.…
在c#中有个关键字叫ref,它的作用是使参数按引用传递,基本用法如下: class RefExample { static void Method(ref int i) { i = ; } static void Main() { ; Method(ref val); // val is now 44 } } 可见,关键字ref在使用的时候,在函数声明可函数调用的时候,在参数上必须添加ref,否则编译器就会提示错误: 但真的是这样的吗? 请看如下的代码 public class Class1 {…
在一面试题中曾遇到这一题目: 说出下面几个函数的区别: private void test(string str){…} private void test(ref string str){…} private void test(out string str){…} 看到网上的答案是这样的: private void test(string str){…} :通过值传送变量 private void test(ref string str){…} :值参数通过引用传递给方法,必须先初始化str…
C# 方法参数关键字:ref.out 当希望方法返回多个值时,声明 out方法很有用.使用 out参数的方法仍然可以将变量用作返回类型(请参见 return),但它还可以将一个或多个对象作为 out参数返回给调用方法.此示例使用 out在一个方法调用中返回三个变量.请注意,第三个参数所赋的值为 Null.这样便允许方法有选择地返回值. out关键字会导致参数通过引用来传递.这与 ref关键字类似,不同之处在于 ref要求变量必须在传递之前进行初始化.若要使用 out参数,方法定义和调用方法都必须…
ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量.它们的区别是: 1.使用ref型参数时,传入的参数必须先被初始化.对out而言,必须在方法中对其完成初始化. 2.使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字.以满足匹配. 3.out适合用在需要retrun多个返回值…
c#中的类和java中的类没什么太大区别.但是c#有些特有的关键字以及属性使得c#具有一些特性. 首先就是this关键字,this在c++和java中都有,可以表示当前对象,以及变量所属对象等.例如 public void somemethod(int hour1){    this.hour = hour1;} 或者otherobject.bar(this) 把当前对象传给otherobject 还有就是指示变量属于哪个对象.this.z = 5; 等等.这里不作赘述. c#中还有using关…
C# Params params params 关键字可以指定在参数数目可变处采用参数的方法参数. 在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字. 示例: 字面意思比较难懂,所以看示例很有用. ;        // 查看调用方法之前的值        Console.WriteLine("Before the method calling: i = {0}", i);        UseRef(ref i);     …
不知大家有没有遇到过需要一个函数返回多个值的情况. 当写代码要返回多个值的时候,当然可以返回一个数组来实现,但如果遇到需要返回的多个值的类型不同呢?这个时候怎么办? c#中,out关键字和ref关键字就起作用了.(且out更适合用到多返回值的地方) 一个函数中,使用out或ref作为形参前的关键字,那么在函数体中只要修改过这个形参,之前调用这个函数时赋给对应形参的实参的值也会修改.这是怎么实现的呢?它的机理就是,使用out 和ref修饰的形参是引用类型,而不是值类型,也就是说它们所存储的信息是地…
http://www.cnblogs.com/sjrhero/articles/1922902.html out的使用 ————————————————————————————————————————————————— class Program    {        static void Main(string[] args)        { string tmp;    //先声明,但不初始化 User _user=new User(); _user.Name(out tmp);   …
ref与out区别(ref有进有出,而out只出不进)   C#基础:ref和out的区别 ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量.它们的区别是: 1.使用ref型参数时,传入的参数必须先被初始化.对out而言,必须在方法中对其完成初始化. 2.使用ref和out时,在方法的参数和执行方…
首先:两者都是按地址传递的,使用后都将改变原来参数的数值. 其次:ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次.这个就是两个的区别,或者说就像有的网友说的,ref是有进有出,out是只出不进. ref(C# 参考) ref 关键字使参数按引用传递.其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中.若要使用 ref 参数,则方法定义和调用方法都必须显式使用 re…
一.params关键字 prams告诉函数的调用者,该函数的参数数量是可变,如果调用函数的参数标识了params关键字,那么我们可以使用逗号分割的参数或者一个数组来作为参数: 1.这里只能是数组,List等集合是不可以的 2.带params标识的参数必须是函数的最后一个参数,因此能一个函数也只能有一个带params标识的参数. 来自MSDN代码示例: public class MyClass { public static void UseParams(params int[] list) {…
ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量.它们的区别是: 1.使用ref型参数时,传入的参数必须先被初始化.对out而言,必须在方法中对其完成初始化. 2.使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字.以满足匹配. 3.out适合用在需要retrun多个返回值…
1 Refdelphi中常量参数就像一个本地常量,或者说只读变量.常量参数与值参数类似,除了不能在过程或函数体内给常量参数赋值,并且不能将常量参数传给另一个var类型参数.(但是,如果你常量参数传递的是一个对象引用,你还是可以修改这个对象的属性的) 使用const使得编译器能够为结构体和字符串类型的参数优化代码.而且它也提供了一种保护,防止无意中传递了一个参数引用到其他过程. 常量参数可能以值方式或引用方式传递到函数,这依赖于使用的编译器.如果要强制编译器使用引用方式传递常量参数,你可以对con…
来源:https://www.cnblogs.com/sunliyuan/p/5999045.html 首先,俩者都是按地址传递的,使用后都将改变原来参数的数值. 其次,ref可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次.这个就是俩个的区别,或者说就像有的网友说的 —— ref是有进有出,out是只出不进. ref(C#参考) ref关键字使参数按引用传递.其效果是,当控制权传递回调用方法时,在…
1.引用型参数: 关键字:ref 2.输出型参数 关键字:out 例: double area(out double p) { double t=3.14*10; p=2*t*3.14; return t; } 使用时: double p; double a=area(out p); 之后 p 就得到2*t*3.14这个之而且 a 也得到返回的 t 的值 3.数组型参数 关键字:params 例: void shili(params double[] A) { } double[] a={7,8…
C#与Java的比较 写完后得知维基百科里有更加全面得多的比较: http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java NET(C#) Java 基本类型 基本类型 C#中有无符号数,Java没有. C#中有值类型,且可自己定义值类型的结构体(struct). Java中的基本类型(或叫基元类型)即为值类型,但Java没有结构体,所以不能自定义值类型. C#中的值类型(包括所有基本类型)间接继承自Object,有自己的方法可以调用…