在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. python学习心得第二章

    python基础 1.关于python编码的问题. python的编码现在主要是两种版本python2.7和python3.5 python2.7默认的是ascii码进行编译,我们可以采用 # -*- ...

  2. web初学之重定向与请求转发

    重定向与请求转发的问题 (1)RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法. (2 ...

  3. webdriver对象定位方法

    webdriver提供了一系列的对象定位方法,常用的有以下几种 · id · name · class name · link text · partial link text · tag name ...

  4. 【转】Web前端研发工程师编程能力飞升之路

    分类: Javascript | 出自 海玉的博客 今天看到这篇文章.写的非常有意思.发现自己还有很长的一段路要走. [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如 ...

  5. javascript [object,Object]

    今天给html标签的属性赋值为对象时,发现取出来的值为 [object,Object],感觉有点奇怪. 代码如下: <!DOCTYPE html> <html> <hea ...

  6. 配置BUG-Linux系统下ssh登陆很慢的解决办法

    很多的Linux用户发现连接上Linux服务器在输入用户名之后还要再等一下才能输入密码,时间过长了,现在小编与大家分享一下如何解决ssh登陆问题的问题,希望对您有所帮助 . 1.我们平时登陆Linux ...

  7. CSS3 结构伪类选择器 详解

    1 CSS3 结构伪类选择器 1.E:root 匹配E元素所在的根元素 即:html 2. E:nth-child(n) (1)匹配E元素的父元素中第n个子元素,(2)且该位置的子元素类型必须是E类型 ...

  8. Socket粘包问题

    这两天看csdn有一些关于socket粘包,socket缓冲区设置的问题,发现自己不是很清楚,所以查资料了解记录一下: 一两个简单概念长连接与短连接:1.长连接 Client方与Server方先建立通 ...

  9. java 缓冲

    缓存主要可分为二大类: 一.通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式: 二.内存缓存,也就是实现一个类中静态Map,对这个Map ...

  10. 嗯,开通blog了!

    应老师建议,开通博客,“把学习时遇到的疑惑和问题随时用blog记录下来”,“把前期的学习心得写上,有时间最好把自己的学习计划也写上”. 用博客记录自己Linux和其他技术的学习日记,记录下学习实践中遇 ...