在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. 使用用Generic.xaml加载默认的主题资源

    把Resource嵌入到Generic.xaml文件中,并把该文件放到应用程序的Themes主题文件夹下面,这们Generic.xaml文件中的资源就可以被系统识别为默认主题一部分,从而进行使用. 为 ...

  2. HDOJ(2056)&HDOJ(1086)

    Rectangles    HDOJ(2056) http://acm.hdu.edu.cn/showproblem.php?pid=2056 题目描述:给2条线段,分别构成2个矩形,求2个矩形相交面 ...

  3. vue-cli webpack 引入jquery

    首先在package.json里的dependencies加入"jquery" : "^2.2.3",然后install 在webpack.base.conf. ...

  4. 一个简单的零配置命令行HTTP服务器

    http-server 是一个简单的零配置命令行HTTP服务器, 基于 nodeJs. 如果你不想重复的写 nodeJs 的 web-server.js, 则可以使用这个. 安装 (全局安装加 -g) ...

  5. 记录下最近项目中常用到的SQL语句

    1  实现对字符串的Spilt功能. 比如查出“I have a dream!”总共有几个单词,需要以' '分割,然后再求出总数. ALTER function [dbo].[fc_SpiltStri ...

  6. 在eclipse中启动tomcat加载不了项目的解决方法

    一.在server视图右键选择Add and Remove时,如果想要部署的项目不在左侧的待选列表中,或是弹出警告There are no resources that can be added or ...

  7. [原创.数据可视化系列之三]使用Ol3加载大量点数据

    不管是百度地图还是高德地图,都很难得见到在地图上加载大量点要素,比如同屏1000的,因为这样客户端性能会很低,尤其是IE系列的浏览器,简直是卡的要死.但有的时候,还真的需要,比如,我要加载全球的AQI ...

  8. 转 Visual C++ 将整合Clang

    原文见:http://www.solidot.org/story?sid=45898 微软在11月释出的Visual C++更新将整合Clang开源C和C++编译器,开发者将可以用Clang编译Win ...

  9. 通过反射绑定事件_Office Visio

    花了好几个小时才Try出来,记录一下: //反射获取Visio.Application,此处没有判断是否有安装Visio            mVisioType = System.Type.Get ...

  10. ffmpeg总结整理

    ffmpeg总结整理参考链接:    http://www.cnblogs.com/youngt/p/5754415.html