C#难点逐个击破(2):out返回参数

传值(by value)与传址(by reference)分别为普通传递参数方式与ref声明方式,传址方式在使用前需要ref关键词修饰;out为输出返回传递,与ref相同之处较多,其重要区别是在上一节讲到的ref在被引用方法中必须被初始化;out在被引用方法中一定要有返回值。


代码如下:

using System;

/******************************
* Chapter:C#难点逐个击破(一)
* Author:王洪剑
* Date:2010-1-15
* Blog:http://www.51obj.cn/
* Email:walkingp@126.com
* Description:重点讲解输出参数out
* ***************************/
namespace TestOut
{
class Program
{
/// <summary>
/// out的输出值、返回值
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
static string OutResultMethod(out string name)
{
string _name = "Wang Hongjian";
name = _name;
string __name = "Zheng Zi";
return __name;
}
static void Main(string[] args)
{
string _name = "Zhang Yu";
Console.WriteLine("调用前:{0}", _name);
string result= OutResultMethod(out _name);
Console.WriteLine("调用后:{0}",_name);
Console.WriteLine("返回结果:{0}",result);
Console.ReadKey();
}
}
}

运行结果:

out在实际项目中使用较多,这是因为out可以返回多个值


代码如下:

class Program
{
/// <summary>
/// out的输出值、返回值
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
static string OutResultMethod(out string name,out string password)
{
string _name = "Wang Hongjian";
name = _name;
string _password = "123456";
password = _password;
string __name = "Zheng Zi";
return __name;
}
static void Main(string[] args)
{
string _name = "Zhang Yu";
string _password;
Console.WriteLine("调用前:{0}", _name);
string result = OutResultMethod(out _name, out _password);//多个参数传递
Console.WriteLine("调用后:{0}",_name);
Console.WriteLine("返回结果:{0}",result);
Console.ReadKey();
}
}

联想多个参数,你一定想到了使用数组吧,不错,使用数组是个很好的方式,数组本身把同一类型的参数打包“封装"为一个对象传递给方法,这样可以简化多参数方法的编写,还能实现类似重载的效果。


代码如下:

static void OutArrayMethod(out string[] strArr)
{
int i = 0;
string[] _strArr = new string[10];
while (i < _strArr.Length)
{
_strArr[i] = "第" + i + "个成员";
i++;
}
strArr = _strArr;
}
static void Main(string[] args)
{
string[] _strArr=new string[10];
OutArrayMethod(out _strArr);
foreach (string str in _strArr)
{
Console.WriteLine(str);
}
Console.ReadKey();
}

运行效果:

源码下载

(0)

相关推荐

  • C#中Response.Write常见问题汇总

    本文实例汇总了C#中Response.Write的常见问题,分享给大家供大家参考之用.具体分析如下: 问题一: Response.Write 后连接Response.Redirect ,则Response.Write无法显示,直接跳转入Response.Redirect 的页面. 解决方式: Response.Write("<script languge='javascript'>alert('成功修改'); window.location.href='index.aspx'<

  • 解析C#中的ref和out参数

    很多初学者(甚至是工作一定时间的开发人员),在遇到ref或者out参数时,总会有点"晕乎乎"或者疑惑,也不知道到底该在啥时候,啥场景下使用ref或者out参数. 本文将通过实例和说明,给大家详细讲解C#中的ref和out参数. 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace RefAndOut{    class Program

  • C#中out与ref的区别实例解析

    本文实例讲述了C#中Out与Ref的区别,可以加深C#程序设计人员对Out和Ref用法的理解,具体分析如下: 一.区别分析: Out和Ref作为参数传递到方法体中,所传递的都是引用地址,两者在操作上本身没有区别. 但Out传递到方法体时,参数会清空,这意味着在方法体内使用Out参数前必须赋值. 而Ref传递到方法体时,其参数也是一起被传递进来,所以作为Ref参数传递,方法体中可以不对其参数赋值. 二.实例代码如下: class Program { /*ref是有进有出,out是只出不进*/ st

  • asp.net(c#)ref,out ,params的区别

    NO.1 params 一个可以让方法(函数)的拥有可变参数的关键字. 原则:在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字. 示例(拷贝到vs2005中即可用,下面不再说明) 复制代码 代码如下: public partial class Form1 : Form { public static void UseParams(params int[] list) { string temp = ""; for (int i

  • 给c#添加SetTimeout和SetInterval函数

    调用示例: 执行效果: 2. 实现代码: 复制代码 代码如下: /// <summary>  2         /// 在指定时间过后执行指定的表达式  3         /// </summary>  4         /// <param name="interval">事件之间经过的时间(以毫秒为单位)</param>  5         /// <param name="action">要执

  • C#实现通过模板自动创建Word文档的方法

    本文实例讲述了C#实现通过模板自动创建Word文档的方法,是非常实用的技巧.分享给大家供大家参考.具体实现方法如下: 引言:前段时间有项目要用c#生成Word格式的计算报告,通过网络查找到很多内容,但是都很凌乱,于是自己决定将具体的步骤总结整理出来,以便于更好的交流和以后相似问题可以迅速的解决! 现通过具体的示例演示具体的步骤:   第一步,制作模板   1.新建一个文档,设置文档内容. 2.在相应位置插入书签:将鼠标定位到要插入书签的位置,点击"插入">"书签&quo

  • C#中out保留字用法实例分析

    本文实例分析了C#中out保留字的用法,分享给大家供大家参考.具体用法分析如下: C#中的out保留字表示这个变量要回传值,最简单的应用是除法,比如你需要一个除法方法,同时得到余数和商,但是普通的方法只能得到一个返回值,这个时候就可以使用Out参数,把另一个值返回. 当希望方法返回多个值时,声明 out 方法非常有用. 使用 out 参数的方法仍然可以返回一个值.一个方法可以有一个以上的 out 参数. 若要使用 out 参数,必须将参数作为 out 参数显式传递到方法.out 参数的值不会传递

  • C#中按引用传递与按值传递的区别,以及ref与out关键字的用法详解

    复制代码 代码如下: /给三个整数从小到大排序并求和及其平均值//其中,三个待求整数及其排序的结果由引用参数传递:其和由输出参数传递:平均值由返回值返回.//在Main()方法中实现三个待求整数的输入及结果的输出//目的:定义方法:调用方法::理解形参和实参的引用传递关系:熟悉引用参数和输出参数的使用.using System;class Class1 {   //x,y,z是形参,按值传递   static void Sort(int x, int y, int z)    {      in

  • 使用@符号让C#中的保留字做变量名的方法详解

    在c和c++中,我们知道没办法起一个变量名叫int,因为这是C/C++保留的关键字,起这么一个变量名没办法区分到底是int类型还是int变量.事实上在C#中也有这么一条规矩,就是不能起一个变量名是保留的关键字.如下图: 在C/C++中,我们是无能为力的,你必须起一个不叫int的,比如加个下划线..当然,C#中也可以这么干. @ 今天阅读<C# 3.0 in a Nutshell, 3rd Edition>才知道,原来还有一种办法就是加@符号(看了@符号的作用又多了一个): 复制代码 代码如下:

  • C#中多态、重载、重写区别分析

    本文实例总结了C#中多态.重载与重写的概念与区别.对于初学C#的朋友来说有不错的参考价值.分享给大家供大家参考.具体分析如下: 重写:是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override. 格式如下: 1.在基类中: public virtual void myMethod() { } 2.在子类中: public override void myMethod() { } 重写以后,用基类对象和子类对象访问myMethod()方法,结果都是访问在

  • c#方法中调用参数的值传递方式和引用传递方式以及ref与out的区别深入解析

    复制代码 代码如下: #define Test using System; namespace Wrox.ProCSharp.ParameterTestSample...{ class ParemeterTest ...{    static void TestInt(int[] ints,int i)    ...{        ints[0] = 100;        i = 100;    } static void TestInt(int[] ints, ref int i)    

随机推荐