这是三个关键字通过字面不是很好理解,我通过三个demo
分别表示一下。
Params
:
public
static
void
UseParams
(params
object
[]
list)
{
for
(int
i = 0; i < list.Length; i++)
{
Console
.WriteLine(list[i]);
}
}
static
void
Main(string
[]
args)
{
UseParams ('a'
, "aa"
,"3"
);
UseParams ('b'
, "shit"
);
UseParams ("ok"
);
Console
.Read();
}
|
通过上面的Demo
可以总结出Params
在方法的参数数目可变的时候使用,需要注意的是在方法声明中使用params
关键字之后不允许再有任何其他参数,并且方法声明中只允许有一个params
关键字;
Ref
:
public
static
void
UseRef(ref
int
i)
{
i += 100;
Console
.WriteLine("i = {0}"
, i);
}
static
void
Main(string
[]
args)
{
int
i = 10;
Console
.WriteLine("Before the method calling: i = {0}"
,
i);
UseRef(ref
i);
Console
.WriteLine("After the method calling: i = {0}"
,
i);
Console
.Read();
}
//
控制台输出:
//Before
the method calling : i = 10
//i = 110
//After the
method calling: i = 110
|
通过这个Demo
发现使用ref
关键字,使参数按引用传递,其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
说明:
1
、若要使用 ref
参数,则方法定义和调用方法都必须显式使用 ref
关键字。
2
、传递到 ref
参数的参数必须最先初始化。这与 out
不同,out
的参数在传递之前不需要显式初始化。
3
、属性不是变量,因此不能作为 ref
参数传递。
4
、尽管 ref
和 out
在运行时的处理方式不同,但它们在编译时的处理方式是相同的。因此,如果一个方法采用 ref
参数,而另一个方法采用 out
参数,则无法重载这两个方法。例如,从编译的角度来看,以下代码中的两个方法是完全相同的。如果尝试这么做,将导致不能编译该代码。
5
、如果一个方法采用 ref
或 out
参数,而另一个方法不采用这两类参数,则可以进行重载。
Out
:
public
static
void
UseOut(out
int
i)
{
i = 10;
i += 100;
Console
.WriteLine("i = {0}"
, i);
}
static
void
Main(string
[]
args)
{
int
i;
UseOut(out
i);
Console
.WriteLine("After the method calling: i = {0}"
,
i);
Console
.Read();
}
|
通过上面发现out
与ref
十分相似,不同之处在于:
1
、ref
要求变量必须在传递之前进行初始化。
2
、尽管作为 out
参数传递的变量不需要在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。
分享到:
相关推荐
本文主要讨论params关键字,ref关键字,out关键字。非常不错,具有参考借鉴价值,需要的朋友参考下吧
// str is now “changed” } } 方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。ref可以把参数的数值传递
C#中ref,out和params有什么区别 out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化...若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字
最近在写程序时遇到params,ref,out 参数问题。回头有自习看了看MSDN,才巩固了基础。现在和大家分享一下。paramsparams 关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力,它在只能出现一次...
C#中有三个关键字-ref,out ,params,虽然本人不喜欢这三个关键字,因为它们疑似破坏面向对象特性。但是既然m$把融入在c#体系中,那么我们就来认识一下参数修饰符ref,out ,params吧,还有它们的区别。
5、使用ref关键字和out关键字都是通过引用传递参数,不同的是ref方式要求实参必须 在传递之前进行__________。而采用out方式时不要求在调用方法前对实参进行____ ______。 6、静态方法只能访问类中的 ________ 字段...
23.方法的参数(ref,out,params) 24.类的继承 20.完善我的留言板(2) 21.完善我的留言板(3) 22.完善我的留言板(4) 25.异常处理 26.命名空间 27.接口 28.泛型 29.抽象类 30.访问限制关键字 31.所有的类的父类 32.委托 ...
23.方法的参数(ref,out,params) 24.类的继承 20.完善我的留言板(2) 21.完善我的留言板(3) 22.完善我的留言板(4) 25.异常处理 26.命名空间 27.接口 28.泛型 29.抽象类 30.访问限制关键字 31.所有的类的父类 32.委托 ...
23.方法的参数(ref,out,params) 24.类的继承 20.完善我的留言板(2) 21.完善我的留言板(3) 22.完善我的留言板(4) 25.异常处理 26.命名空间 27.接口 28.泛型 29.抽象类 30.访问限制关键字 31.所有的类的父类 32.委托 ...
23.方法的参数(ref,out,params) 24.类的继承 20.完善我的留言板(2) 21.完善我的留言板(3) 22.完善我的留言板(4) 25.异常处理 26.命名空间 27.接口 28.泛型 29.抽象类 30.访问限制关键字 31.所有的类的父类
1. static关键字 2. C#中的集合 * ArrayList * HashTable ...3. out,ref,params关键字 4. 方法重载 5. 继承 6. 多态 * 虚方法实现多态 * 抽象方法实现多态 * 虚方法和抽象方法的区别 7. 接口
C# 中的yield、ref、out、params关键字理解.并有代码测试。 C#预处理指令(未做测试例子)。 对C# 中堆栈,堆,值类型,引用类型的理解。
C# 是一种具有 C++ 特性,Java 样式及 BASIC 快速建模特性的编程语言。如果你已经知晓 C++ 语言,本文将在不到一小时的时间内带你快速浏览 C# 的语法。如果熟悉 Java 语言,Java 的编程结构、打包和垃圾回收的概念...
下面关键字中不是用来修饰方法的参数的是 【 】 A. ref B. params C. out D. in 18. 数据库管理系统的英文缩写是 【 】 A. DBMS B. DBS C. DBA D. DB 19. 公司中有多个部门和多名职员,每个职员只能属于一个部门,...
8.3 使用ref和out参数 142 8.3.1 创建ref参数 142 8.3.2 创建out参数 143 8.4 计算机内存的组织方式 145 8.5 system.object类 147 8.6 装箱 147 8.7 拆箱 148 8.8 数据类型的安全转换 149 8.8.1 is操作符 ...
params :params 关键字可以指定在参数数目可变处采用参数的方法参数 ref :引用传递 out : 7, namespace(名字空间) C#学习笔记(2)【大 中 小】【打印】【加入收藏】【关闭】 【收藏到新浪ViVi】【收藏到365KEY】 ...