- 浏览: 94711 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
曾老师:
请问
dataFilter: function(data, ...
利用jquery.validate异步验证用户名是否存在 -
changningbuddha:
错误 1 在证书存储区中找不到清单签名证书。 myClock怎 ...
C#winform的小闹钟
ref
通常我们向方法中传递的是值.方法获得的是这些值的一个拷贝,然后使用这些拷贝,当方法运行完毕后,这些拷贝将被丢弃,而原来的值不将受到影响.此外我们还有其他向方法传递参数的形式,引用(ref)和输出(out).
有时,我们需要改变原来变量中的值,这时,我们可以向方法传递变量的引用,而不是变量的值.引用是一个变量,他可以访问原来变量的值,修改引用将修改原来变量的值.变量的值存储在内存中,可以创建一个引用,他指向变量在内存中的位置.当引用被修改时,修改的是内存中的值,因此变量的值可以将被修改.当我们调用一个含有引用参数的方法时,方法中的参数将指向被传递给方法的相应变量,因此,我们会明白,为什么当修改参数变量的修改也将导致原来变量的值.
创建参数按引用传递的方法,需使用关键字ref.例;
using System;
class gump
{
public double square(ref double x)
{
x=x*x;
return x;
}
}
class TestApp
{
public static void Main()
{
gump doit=new gump();
double a=3;
double b=0;
Console.WriteLine("Before square->a={0},b={1}",a,b);
b=doit.square(ref a);
Console.WriteLine("After square->a={0},b={1}",a,b);
}
}
通过测试,我们发现,a的值已经被修改为9了.
out
通过指定返回类型,可以从方法返回一个值,有时候(也许还没遇到,但是我们应该有这么个方法),需要返回多个值,虽然我们可以使用ref来完成,但是C#专门提供了一个属性类型,关键字为out.介绍完后,我们将说明ref和out的区别.
using System;
class gump
{
public void math_routines(double x,out double half,out double squared,out double cubed)
//可以是:public void math_routines(//ref double x,out double half,out double squared,out double cubed)
//但是,不可以这样:public void math_routines(out double x,out double half,out double squared,out double cubed),对本例来说,因为输出的值要靠x赋值,所以x不能再为输出值
{
half=x/2;
squared=x*x;
cubed=x*x*x;
}
}
class TestApp
{
public static void Main()
{
gump doit=new gump();
double x1=600;
double half1=0;
double squared1=0;
double cubed1=0;
/*
double x1=600;
double half1;
double squared1;
double cubed1;
*/
Console.WriteLine("Before method->x1={0}",x1);
Console.WriteLine("half1={0}",half1);
Console.WriteLine("squared1={0}",squared1);
Console.WriteLine("cubed1={0}",cubed1);
doit.math_rountines(x1,out half1,out squared1,out cubed1);
Console.WriteLine("After method->x1={0}",x1);
Console.WriteLine("half1={0}",half1);
Console.WriteLine("squared1={0}",squared1);
Console.WriteLine("cubed1={0}",cubed1);
}
}
通过使用out关键字,我们改变了三个变量的值,也就是说out是从方法中传出值.
我们发现,ref和out似乎可以实现相同的功能.因为都可以改变传递到方法中的变量的值.但是,二者本质本质的区别就是,ref是传入值,out是传出值.在含有out关键字的方法中,变量必须由方法参数中不含out(可以是ref)的变量赋值或者由全局(即方法可以使用的该方法外部变量)变量赋值,out的宗旨是保证每一个传出变量都必须被赋值.
上面代码中被/**/注释掉的部分,可以直接使用.也就是说,在调用方法前可以不初始化变量.但是"x1"是要赋值的,否则要报错.而ref参数,在传递给方法时,就已经是还有值的了,所以ref侧重修改.out侧重输出.
发表评论
-
缩略图
2011-05-16 11:19 1269缩略图 Web应用中最薄弱的环节就是传输,即速度问题。图片格 ... -
给图片加水印
2011-05-16 11:14 1426水印 在网络中发布资源时,比如图片,很多时候需要保护版权,即 ... -
.net绘图操作五
2011-05-16 11:02 1213统计图是信息管理系统常用的功能,常用的有饼图、柱形图、拆线图等 ... -
.net绘图操作四
2011-05-16 11:00 992绘制简单图形 简单图形是组成复杂图形的基础,通过本小节的例子 ... -
.net绘图操作三
2011-05-16 10:47 1598在.NET中图形包括以下两个步骤。 第一,创建Graphic ... -
.net绘图操作二
2011-05-16 09:57 13931.4 Brush Brush通常被称为,用于定义填充图形形 ... -
.net绘图操作一
2011-05-16 09:35 1498.NET对图形操作的支持类 ... -
(推荐)海量数据库的查询优化及分页算法方案
2011-04-28 18:14 1118建立一个web 应用,分页浏览功能必不可少。这个问题是数据库处 ... -
在你的Fckeditor安装Google map plugin
2011-04-28 18:13 1260Fckeditor是现在很常见的Html编辑器,他好用的地方 ... -
分享c#动态生成文字图片解决方案
2011-04-28 18:12 3519大家都知道我们如果想把网页上的文字做出比较炫的效果,便只能用P ... -
浅谈ASP.NET报表控件
2011-04-28 18:07 1903浅谈ASP.NET报表控件 作者:管理员 来源:51CT ... -
数据绑定控件导出到excel
2011-04-26 20:41 1393aspx页面代码 <div> ... -
数据库连接访问数据时出错
2011-04-22 09:39 1001超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种 ... -
文件上传中sever.mapPath和Request.PhysicalApplicationPath用法
2011-04-16 08:44 1142aspx页面代码: 添加一个上传控件 <p> ... -
文件的写和读操作方法总结
2011-01-02 21:55 899今天下午看了文件的相关操作,其中最常见的就是创建和读取的操作了 ... -
vs里面根据html模板页生成静态html页面
2011-01-02 17:19 1271在.net中生产静态的html页面主要用到的 IO流技术,先读 ... -
ckeditor的配置(html在线文本编辑器)
2011-01-01 09:11 1877一.ckeditor 3.3.1精简 1、删除_sam ... -
.net的开源cms系统网址收藏
2010-12-21 14:01 947这是我从别人博客上看 ... -
使用下拉列表对gridview分页
2010-12-10 16:32 915这是我看到别人的博客的,不说好不好,先记下来,以后还是有用;先 ... -
很完美的sql数据库访问助手类封装
2010-11-27 22:08 1427看到一本教材上对数据 ...
相关推荐
C#中关键字ref与out的区别 C#中关键字ref与out的区别是非常重要的知识点之一。这些关键字可以使参数按照引用来传递,而不是传递值的拷贝。通常情况下,我们向方法中传递的是值,方法获得的是这些值的一个拷贝,然后...
在C#编程语言中,`ref`和`out`是两个关键字,它们都用于方法参数传递,但有各自独特的用途和规则。理解并熟练运用`ref`和`out`是提高C#编程效率的关键。 首先,`ref`关键字用于当需要在方法内部修改传入的参数值,...
### C#学习体会:使用`ref`和`out`传递数组 在C#语言中,`ref`和`out`是两个非常重要的关键字,它们主要用于处理函数参数的传递方式。通常情况下,在C#中调用方法时,参数是以值传递的方式进行的,也就是说,方法内...
### C#中的`ref`、`out`和`params`的区别 #### 一、概述 在C#编程语言中,`ref`、`out`和`params`是三种不同的参数修饰符,它们分别用于控制方法如何处理传入的参数。这些关键字在不同的场景下提供了非常有用的...
通过上面的例子和解释,我们可以看到 `in`、`ref` 和 `out` 关键字在C#中的不同用途: - `in` 用于值传递,方法内部无法修改参数。 - `ref` 用于引用传递,可以在方法内部修改并更新原始变量。 - `out` 也是用于引用...
C#中的ref关键字详解 C#中的ref关键字是一个非常重要的概念,对于编程人员来说,正确理解ref关键字可以帮助他们更好地编写代码。在本文中,我们将详细地解释ref关键字的概念和用法,並结合实例代码来说明其正确用法...
在C#编程语言中,`ref`和`out`关键字是两种特殊的参数传递方式,它们允许函数修改调用者提供的变量的值。虽然这两种关键字在功能上有些相似,但它们的使用场景和语法规则有所不同。本文将深入探讨`ref`和`out`的用法...
本文将深入解析C#中涉及的几种关键参数传递机制:值类型的基本传递、`ref`关键字以及`out`关键字,并通过具体示例来说明这些传递方式的区别及应用场景。 ### 值类型的参数传递 在C#中,当我们将一个值类型(如基本...
本文将通过实例和说明,给大家详细讲解C#中的ref和out参数。 代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace RefAndOut{ class Program { static void...
C#方法中参数ref和out详解 ...C# 方法中参数 ref 和 out 是两种不同的参数类型,它们都可以用来传递参数,但是它们的使用场景和要求不同。了解这两种参数类型的区别和使用场景,可以帮助开发者更好地编写 C# 代码。
在C#编程中,`ref`和`out`关键字是用来处理方法参数的特殊方式,它们允许函数修改调用者提供的变量。虽然这两种关键字在某些方面很相似,但也存在关键的区别。 `ref`关键字: 1. `ref`参数要求在传递到方法之前必须...
在C#编程语言中,`ref` 和 `out` 关键字用于参数传递,它们都是为了改变函数调用时实参的值。然而,两者在使用上存在一些关键区别,理解这些差异对于编写高效且正确的代码至关重要。 1. **传值方式**: 在C#中,...
本文实例讲述了C#中Out与Ref的区别,可以加深C#程序设计人员对Out和Ref用法的理解,具体分析如下: 一、区别分析: Out和Ref作为参数传递到方法体中,所传递的都是引用地址,两者在操作上本身没有区别。 但Out传递到...
在C#编程语言中,`ref`和`out`是两种用于方法参数的关键字,它们允许方法直接修改传递给它的参数值。这两种关键字的主要区别在于调用方法时参数的初始化以及参数的传递方式。 #### `ref`关键字 `ref`关键字使得...
在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? MSDN: ref 关键字使参数按引用传递。其效果是,当控制权...
在C#编程语言中,`ref`和`out`关键字是用来处理方法参数的引用传递,它们都是为了在方法之间共享变量的值。虽然两者在某些方面相似,但它们的使用场景和规则有所不同。 首先,我们要明确一点,C#中参数传递有两种...
要想充分理解C# out和ref,必须先明确如下两个概念(对值类型与引用类型掌握比较好的,可以跳过“一、明确两个基本概念”) 一、明确两个基本概念 值类型: 定义:通过值的方式来传递,即实际参数向形式参数传递...
在.NET编程中,`Ref`和`Out`参数是C#、VB.NET等语言中用于方法调用的重要特性,它们允许方法修改传递给它的变量值。这两种参数修饰符提供了与普通参数不同的行为,有助于处理复杂的数据传递场景。下面将详细探讨`Ref...
在C#编程语言中,`out`和`ref`关键字都是用于传递参数的方式,它们都涉及到按引用传递,这意味着函数可以改变实参的值。然而,它们之间存在一些关键的区别,下面将详细解释这些概念。 1. **相同点**: - **按引用...