C#值参数、引用参数和输出参数

  一、值参数:在使用参数时,是把一个值传递给函数使用的一个变量。对函数中此变量的任何修改都不会影响函数调用中指定的参数。(由于函数只有一个返回值,不能用作参数的多个变量值)。

  二、引用参数:即函数处理的变量与函数调用中使用的变量相同,而不仅仅是值相同的变量。因此,对这个变量的任何改变都会影响用作参数的变量值。需用ref关键字指定参数。用作ref参数的变量有两个限制,由于函数可能会改变引用参数的值,所有必须在函数调用中使用“非常量”变量。其次,必须使用初始化过的变量。

  三、输出参数:out关键字,指定所给定的参数是一个输出参数。Out关键字的使用方式与ref关键字相同,实际上,他的执行方式与引用参数完全一样,因为在函数执行完毕后,该参数的值将返回给函数调用中使用的变量。

  四、引用参数和输出参数的一些重要区别:

  1. 把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数。
  2. 另外,在函数使用out参数时,必须把它看成是尚未赋值。即调用代码可以把已赋值的变量用作out参数,但存储在该变量中的值会在函数执行时丢失。

  下面通过三个方法分别对三种参数传递进行说明:

     static void AMethod(int i)//值传递
        {
            i = i + 1;
        }
        static void BMethod(ref int i)//引用传递
        {
            i = i + 1;
        }
        static void CMethod(out int i, out string j)//输出传递
        {
            i = 6;//输出参数函数必须在函数内部进行初始化赋值
            j = "return";
        }
        static void Main(string[] args)
        {
            int i = 1; string j = "C#";//输出参数赋值
            AMethod(i);//调用值传递函数
            Console.WriteLine("(1)、 i=1;经过AMethod方法(加1),值传递之后  i=" + i);
            Console.WriteLine();
            BMethod(ref i);//调用引用传递函数
            Console.WriteLine("(2)、 i=1;经过BMethod方法(加1),ref传递之后 i=" + i);
            Console.WriteLine();
            CMethod(out i, out j);//调用输出传递函数
            Console.Write("(3)、 i=1;经过CMethod方法(加1),out传递之后 ");
            Console.WriteLine("i=" + i + " j=" + j); Console.WriteLine();
            Console.ReadKey();
        }

  结果如下显示:

  

时间: 2024-10-24 16:19:54

C#值参数、引用参数和输出参数的相关文章

MyBatis3——输出参数ResultType、动语态sql

输出参数ResultType 1.输出参数为简单类型(8个基本+String) 2.输出参数为对象类型 3.输出参数为实体对象类型的集合:虽然输出类型为集合,但是resultType依然写集合的元素类型,eg:resultType="person" 4.输出参数类型为HashMap          --->一个HashMap对应一个人的多个元素(多个属性):查询所有人的属性:List<HashMap<String, Object>> resultType

Java方法输出参数

在写Java代码的时候,自定义方法的时候,都会牵扯到参数问题,方法参数包括输出参数和输入参数. 下面主要说说输出参数: 1.没有输出参数的时候就直接把输出参数写成void就可以. 2.当输出参数只有一个数据的时候,直接返回输出参数直接写成输出数据的类型就行. 3.当输出多个数据且类型一致的时候,使用数组,集合等等也可以实现. 4.当输出多个数据但是数据类型不一致的时候,此时就比较麻烦.此时需要将需要返回的数据类型封装到一个类中,然后返回的值写成新封装的类的名字即可. 例如: <span styl

C#方法参数--值参数,引用参数,输出参数

值参数: 使用值参数,通过复制实参的值到形参的方式,把数据传递到方法,方法被调用的时候,系统做如下操作: 在栈中为形参分配空间: 复制实参到形参. 注意:一个值参数的实参不一定是变量,它可以是任何能够计算成相应数据类型的表达式. 在把变量用作实参之前,变量必须被赋值(除非是输出参数,这个稍后介绍),对于引用类型,变量可以设置成实际引用或者Null. 引用参数: 使用引用参数时,必须在方法的申明和调用中都使用关键字ref修饰符. 实参必须是变量,在用作实参前必须被赋值.如果是引用类型的变量,可以赋

为什么赋值操作符函数的参数为const引用,返回值为引用

为什么赋值操作符函数的参数为const引用,返回值为引用 1.返回值类型 返回类型一般声明为类型的引用,并在函数结尾时返回实例自身的引用(即*this).这里主要有两个原因:(1)返回引用可以减少一次拷贝构造和析构函数导致不必要的开销,因为返回值类型不是引用,会创建一个匿名对象,这个匿名对象时个右值,获取return的值.(2)可以实现连续赋值 在例子中 b=c=a; 返回值不是引用类型也是可以的,其运算顺序 b=(c=a); c得到一个右值,再将右值赋给b,所以逻辑上没有问题的.但是如果是 (

SQL Server 第三堂课,学习数据库函数。跟C#语言异曲同工,同样是由输入参数,输出参数,函数体,返回值四要素组成,不同的是语法和写法。掌握知识的关键在与学好C#语言的函数

--存储过程 --定义变量 declare @bianliang int set @bianliang =12 --变量赋值 select @bianliang print @biangliang --定义两个变量求和 declare @bianliang1 int, @bianliang2 int set @bianliang1 =1 --给变量赋值用set set @bianliang2 =2 select @bianliang1+@bianliang2 --创建存储过程 create pr

存储过程输出参数、返回值、返回表及C#调用

存储过程中可以定义输出变量,返回值,执行存储过程还能获得结果集.每个存储过程的默认返回值为0.下面紧接着上文 SQL Server中存储过程Stored Procedure创建及C#调用 基础上写的一个新的Stored Procedure存储过程则包含了输出参数.返回值以及select结果. USE [db] GO /****** Object: StoredProcedure [dbo].[insert_persions] Script Date: 2/25/2015 11:14:11 AM

Oracle存储过程 输出参数赋值异常:“Oracle.DataAccess.Types.OracleString”的类型初始值设定项引发异常。

场景: 写了一个有返回参数的存储过程,在个另开发人员机器上都正常.其它机器报如题错误.让人郁闷的是,所有调用方都是客户端,根本不存在网上众贴所说的版本不一致问题. 分析: 虽然网上的帖子没有根本解决问题,但还是给了些丝路.参数值类型问题.而且,我也把输出参数赋值语句注释后,也可以正常调用(只是结果没返回).尝试了将类型转为Oracle的OracleString,强制转clr的string,都不行. dicParaOut[kvp.Key] = (string)command.Parameters[

Python什么是值或引用函数参数

这篇文章是Python前往遇到有疑问的功能. 下面一段是原有的基础教程Python函数. 按值传递參数和按引用传递參数 全部參数(自变量)在Python里都是按引用传递.假设你在函数里改动了參数,那么在调用这个函数的函数里,原始的參数也被改变了.比如: #!/usr/bin/python # 可写函数说明 def changeme( mylist ): "改动传入的列表" mylist.append([1,2,3,4]); print "函数内取值: ", myli

创建有输出参数的存储过程并在c#中实现DataGridView分页功能

不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure usp_getPage1 go create procedure usp_getPage1--存储过程名称 @count int output,--输出参数 @countIndex int=1,--参数带默认值 @countPage int=5--参数带默认值 as --一个sql语句.ROW_N