在C#中如果需要把值类型转换成引用类型传递其他方法中并使其原来值发生改变,使用 ref 和 out 转换成引用类型传递。

1. ref : 使用ref之前需要定义变量并初始化(必须初始)

 class Program
{
static void Main(string[] args)
{ int i = 10; //定义变量,并初始化;
Console.WriteLine(" i = " + i); //传递之前打印
Demo(ref i); //通过ref 把 i 改变引用传递
Console.WriteLine(" i = " + i); Console.ReadKey();
} //接收方法参数也要使用 ref 关键字
public static void Demo(ref int i)
{
i = i + 100;
} }

打印结果 :

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOYAAABsCAIAAADxI1lSAAACeElEQVR4nO3dTW7aQACGYe4JuQDpAZoepttuewRfpUmrSk5bQiBAkxp11/ITGyfCxF/yPGI1gplZvBqMHSmD77fVx0+fh+MLL6+I16Cc/RmO3w8ghWQJU86q4fjipXcBrZWzaiRZgpTzanR+ONmiKIqi6G4b+5MX27pbmjDlvBqdfzj4tk672Z98Z0S1/FfO122S7UjdObo54qBlSzlfnzUm+9Rv52JPy488OuLagF3lfH32rr8XBpvhdrQ6YY6e7BFP2Z2zts3qvH59PmWL7cvZjlYnTJ+TPc3qhDmY7DO+6NtrmLy7RcnW8pSFvpAsYSRLGMkSRrKEuZYsWSRLmJbJdn1ztG7y/XH3a9+6PiRbN7mnYjziZX9+1Z2XzeM77znNVumLJz2wbTNhwzPY5o+0Gf834trg7ernn8XUjW8m2/Wu6KmjX8ue4JTdOWvb7IrXI/HnV7F9OdvRruipxGRPsyt66mCyz/iib69u8oZFu9sMGa7vPP0iimQJI1nCSJYwkiWMZAkjWcL8kCxZJEsYyRLmp2TJIlnCSJYwkiWMZAnzayFZokiWMJIljGQJI1nCTCRLlslSskSRLGFuJEsWyRJGsoSZSpYs05VkiSJZwkiWMLeSJctMsmSRLGEkSxjJEma+qiRLkrvfkiWKZAkjWcJIljCLe3cMiCJZwizuXRgQRbKEWUqWLJIljGQJs3yQLFFWD25yEcUdA8L4V3WE+TZ1yhLlq2TJIlnCSJYwkiWMZAlzJVmyXN1IliiSJYxkCSNZwlxKliySJYxkCSNZwkiWMJIljGQJczmRLFEkS5gvkiWLZAkjWcJIljCSJYxkCSNZsvwFVfjYZVLb5cQAAAAASUVORK5CYII=" alt="" />

2. out : 使用out之前需要定义变量,不必初始化;初始化留给被调用方法里进行。

 class Program
{
static void Main(string[] args)
{ int i ; //定义变量[不必初始化],如果这里进行了初始化,在接收方法会被替换掉;
Demo(out i); //通过 out 把 i 改变引用传递
Console.WriteLine(" i = " + i); Console.ReadKey();
} //接收方法参数也要使用 out 关键字
public static void Demo(out int i)
{
i = 100; //使用out 方式初始工作在方法内部进行
i = i + 200; //把 i + 200 = 300
} }

打印结果如下:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAABJCAIAAABwy9X3AAACj0lEQVR4nO2YXU/TUACG+9/8ijFKlBDYHCZG41DnZwSV3+Kl114jChb8mOzDWxyOtesmaqZOE1lbduNF21HaHlqU9qXp++S5YKfN6emzQ5dUqih/HLcrynZVtRxU1UFV1WttvdbWa5pR18y6ZtY7PruOHfNDNAMmGamZNbFVy7ZtxXFtpGquqcZ7l2XVKCtGWTHeOb5t7fqmZbze3HV101htGitNY6VpyJ8s9VcjN2yXN/Tlhr7U0Jca+kvHF46LDX3xo+1zlwvr+sL6wFLq9ne+/vY4/H+/hXnQCb94/LXHLZH94VZ/+NnrTnfkT9tOkJrlD9v2XlXL78Eqbnu2rZ7Z6pnSk6fPpoqzbnPFORqrUq44J5GEyc88RC8hezA6gPzMI/QSskeuGB5dlmVZluO4uuxCNO4+JBpPGVPXwh8vMd2he1rR3+6PovH0MXFlFr0ESQr7AvzR073ZL1x6sM/Rg/4vyz4iLiMwumce0Xj6OJu/F3pOrLfnz+eOKwU9XvwbP2WcnrgTeg5kp4du8BRHP3n+Vug5CdxeYHTPIdF4+jg+Vgo9J6bbExX0XE60tVMc/di5/aL/8+MiIqKZRReNdTHJcSLCTieHzKnx2+glZI8zk3fRS8geY4X76CVkj/HLR+I1QLaYvMr36YkT5dUuOWQuXn+MXkL2KNyYRy8hexRuMnriTJcYPXEYHQCjA2B0AIwOYLo0739pnu631UcfRgfA6AAYHQB/SAEwOgBGB8DoABgdAKMDYHQAjA6A0QEwOgBGB8DoABgdAKMDYHQAjA6A0QEwOgBGB8DoABgdAKMDYHQAjA6A0QEwOgBGB8DoABgdAKMDYHQAjA6A0QEwOgBGB8DoABgdAKMnz1++vylF8LwY8QAAAABJRU5ErkJggg==" alt="" />

[C#基础]ref和out的使用的更多相关文章

  1. [C#基础]ref和out的区别

    在C#中通过使用方法来获取返回值时,通常只能得到一个返回值.因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? MSDN:       ref 关键字使参数按 ...

  2. 10. react 基础 ref 的使用 及 React 16 的生命周期函数 及 生命周期函数使用场景

    一. ref 的使用 ( 直接获取 DOM 元素 ) 在 input 标签上 可以使用 ref 属性 获取当前DOM节点 eg: import React , { Component, Fragmen ...

  3. C#基础-ref、out

    1.默认情况下,C#假定所有的方法参数传递都是传值的. 如下面的方法: public static void Main(string[] args) { int val = 5; //调用AddVal ...

  4. (C#基础) ref 和out练习

    对于C#中这两个关键字的用法,常常混淆,有点不清楚,今天又一次看到.遂把它们都记录下来,希望能有所用.这些都是他人写的,我只是搬过来一次,加深印象. 代码 using System; using Sy ...

  5. C#基础--Ref与Out区别

    两者都是按地址传递的,使用后都将改变原来参数的数值. class Program { static void Main(string[] args) { int num = 1; Method(ref ...

  6. vue基础 ref的作用

    1.  ref 获取dom元素,除了能获取dom元素也能获取组件dom,   组件通信:        在父组件中直接调用ref定义的组件的数据或者方法 <div id="app&qu ...

  7. [Laravel] 14 - REST API: Laravel from scratch

    前言 一.基础 Ref: Build a REST API with Laravel API resources Goto: [Node.js] 08 - Web Server and REST AP ...

  8. Python :数据结构

    LearnPython :数据结构 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .labe ...

  9. Java.Annotations

    Annotation 0. Annotation Tricks http://developer.android.com/reference/java/lang/annotation/Annotati ...

随机推荐

  1. Spring基本框架

    1.Spring基本框架的概念 Spring 框架是一个分层架构,由 7 个定义良好的模块组成.Spring模块构建在核心容器之上,核心容器定义创建.配置和管理bean的方式.组成Spring框架的每 ...

  2. Qt窗口添加鼠标移动拖拽事件

    1. .h文件中添加 private:    QPoint dragPosition; 2. 在cpp文件中重写鼠标点击和拖拽函数 void ShapeWidget::mousePressEvent( ...

  3. java图形界面写个小桌面,内置简单小软件

    一.做个这样的效果,双击图标打开相应的应用 二.主界面类,使用JavaSwing的JDesktopPane类创建这个桌面 package com.swing; import java.awt.Bord ...

  4. python第二天-linux权限管理

    (1)linux登陆密码忘了,怎么办? 把系统重启,在进入系统之前不断的按键盘左上角的"Esc"键会进入这样一个画面,按键盘上的e进入编辑. 进入这个画面以后,通过键盘的上下方向键 ...

  5. P4基函数

    July , P4 syms p1 p2 p3 phi(:,) = /*p1.*(*p1-).*(*p1-).*(*p1-); phi(:,) = /*p2.*(*p2-).*(*p2-).*(*p2 ...

  6. cf727e

    题意:给你一个模式串和一堆长度相同的不相同的匹配串,问是否有一个方案可以让这个模式串由这些匹配串首尾相连组成,每个串只能出现一次. 思路:还是比较简单的,显然模式串每个位置最多匹配一个匹配串,因为所有 ...

  7. js中原型继承的概念

  8. Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute'

    [TypeLoadException: Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from as ...

  9. robotium(及百度cafe)运行testcase之后程序挂起没有响应的原因调查及解决

    一.问题背景 刚开始用的是百度cafe搭建的框架,已经用了一些版本,最后的test版本在7.4的apk上能跑,但是在最新发布的7.5的版本上跑不了,直接提示nullPointer错误,通过打日志的方式 ...

  10. JavaWeb---通过ServletConfig获取Servlet的初始化参数

    package com.zyz; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import j ...