在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.冒泡排序: 冒泡是一种基础的算法,通过这算法可以将一堆值进行有效的排列,可以是从大到小,可以从小到大,条件是任意给出的. 冒泡的原理: 将需要比较的数(n个)有序的两个 ...

  2. DNS初识

    /注释----本文大部分内容来自网络/ 一.定义: DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库, ...

  3. MD5在java中的使用

    MD5是什么? MD5是message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的"数字指纹".任何一个文件,无论是 ...

  4. Spring boot配置文件 application.properties

    http://www.tuicool.com/articles/veUjQba 本文记录Spring Boot application.propertis配置文件的相关通用属性 # ========= ...

  5. linux下redis的安装与部署及基础命令

    <1>下载安装文件:redis-3.2.5.tar.gz 放在opt目录下 <2> tar -zxvf redis-3.2.5.tar.gz,备份redis.conf到自己的目 ...

  6. range()和xrange()区别

    版本:Python2.7 1.先看帮助说明 (1)range()返回一个递增或递减的数字列表,列表的元素由三个参数决定       start 表示列表开始的值,默认为0       stop 表示列 ...

  7. CoreSeek

    [CoreSeek] CoreSeek有两个核心模块Indexer和Search. Indexer:负责从MySQL拉取数据源,把数据源分词,建立索引. Search:搜索模块. CoreSeek工作 ...

  8. Android 4.0 源代码结构

    Android源码的第一级目录结构   Android/abi (abi相关代码.ABI:application binary interface,应用程序二进制接口)   Android/bioni ...

  9. HDU 1285 确定比赛名次 拓扑排序模板题

    http://acm.hdu.edu.cn/showproblem.php?pid=1285 #include <cstdio> #include <cstdlib> #inc ...

  10. linux 正则表达式与文件格式化处理

    此文涉及命令:grep.sed.awk.printf.diff.cmp.patch. 概念: 什么是正则表示法 简单的说,正则表示法就是处理字符串的方法,他是以行为单位来进行字符串的处理行为, 正则表 ...