c#关键字及ref和out
最近在写程序时遇到ref,out 参数问题。回头有自习看了看MSDN,才有巩固了基础。我把我的测试程序贴出来,大家分享一下。
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。传递到 ref 参数的参数必须最先初始化。这与 out 不同,后者的参数在传递之前不需要显式初始化。这是out与ref的却别所在。
有点像,c++中的函数传递引用,和传递值。比较经典的程序是交换两个数。这里不在贴出代码。
using System;
using System.Collections.Generic;
public class MyClass
{
public static void Main()
{
/// 通过测试发现,基类型的参数,在没有用ref 的声明后,其值并没有改变,说明此函数中传递的是值。
/// 但是,当使用ref 参数是发现,其值发生了变化,说明在此函数中传递的是引用。
int x=100;
ChangeTheNumber(ref x);
Console.WriteLine(x.ToString());
///通过测试发现,类的实例作为,参数,即使不用ref 参数,它的属性也发生了变化。那是因为,类的的实例,是一个引用。所以不用再使用ref了。
/// 这让我想到了,几个月前的项目开发,在不同窗体之间传递参数,但是一直想着做个什么共有方法,然后互相调用。但是,其实很简单,
/// 在构造函数中传入需要传入的类的实例就可以了,因为传递的是引用。其属性都会变化。不用再用什么麻烦的方法了。
///TestTheClass
TestClass classInstance1=new TestClass("firstname");
ChangeTheNumber(classInstance1);
Console.WriteLine(classInstance1.Name);
TestClass classInstance2=new TestClass("second");
ChangeTheNumber(classInstance2);
Console.WriteLine(classInstance2.Name);
Console.Read();
}
#region Helper methods
private static void WL(object text, params object[] args)
{
Console.WriteLine(text.ToString(), args);
}
private static void RL()
{
Console.ReadLine();
}
private static void Break()
{
System.Diagnostics.Debugger.Break();
}
private static void ChangeTheNumber(ref int number)
{
number=100;
}
private static void ChangeTheNumber(int x)
{
x=100;
}
private static void ChangeTheNumber(TestClass classInstance)
{
classInstance.Name="change to another name";
}
private static void ChangeTheNumber(ref TestClass classInstance)
{
classInstance.Name="change to another name";
}
#endregion
}
///
///测试类
///
public class TestClass
{
public TestClass(string name)
{
this.name=name;
}
private string name;
public string Name
{
get
{
return name;
}
set
{
name=value;
}
}
}
c#关键字及ref和out的更多相关文章
- C#中三个关键字params,Ref,out
关于这三个关键字之前可以研究一下原本的一些操作 using System; using System.Collections.Generic; using System.Text; namespace ...
- 5.C#知识点:ref和Out关键字浅谈
首先我们要知道ref和out在C#里面是什么? 答:它们俩是C#里面的关键字. 他们俩是干啥的呢? 答:他们俩是方法参数的修饰符号,一但使用,方法定义和方法都用都要使用这个关键字,这一点是死规定. 好 ...
- Out 与 Ref 关键字的区别
相同点:既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键字都能够提供相似的功效, ...
- 关于c#中”ref”和”out”关键字的一些理解
一. 综述(本文内容大部分来自网络,经本人整理而成,仅供学习参考,不免理解错误,欢迎批评指正) 在c#中,方法的参数传递有四种类型: (1) 传值参数(by value) 传值参数无需额外的修饰符.传 ...
- 《ASP.NET 1200例》ref关键字与out关键字
REF关键字 ref 关键字会导致通过引用传递的参数,而不是值. 通过引用传递的效果是在方法中对参数的任何改变都会反映在调用方的基础参数中. 引用参数的值与基础参数变量的值始终是一样的. 不要将“通过 ...
- C# 中三个关键字params,Ref,out
一. using System; using System.Collection.Generic; using System.Text; namespace ParamsRefOut { class ...
- C#知识点:ref和Out关键字浅谈
首先我们要知道ref和out在C#里面是什么? 答:它们俩是C#里面的关键字. 他们俩是干啥的呢? 答:他们俩是方法参数的修饰符号,一但使用,方法定义和方法都用都要使用这个关键字,这一点是死规定. 好 ...
- 索引器和ref、out关键字
这节讲三个小知识:索引器.ref.out. 索引器: 在一个类中,我们可以定义一个索引器,它可以让我们在外部像访问数组元素一样访问类的属性成员. 索引器的定义就像定义属性一样,只不过名称为this,后 ...
- C#中ref关键字的用法总结
ref表示引用的意思,C#中它有多种用法,这里简单总结一下: 1.按引用传递参数 具体可见:C#中的值传递与引用传递(in.out.ref) 2.引用局部变量 引用局部变量指的是在变量声明时使用ref ...
随机推荐
- cnblog排版
记录一些自己写博客中的排版技巧 一.标题 红色部分代码用在标题的CSS样式中 <p style="background: gray; font-size: 18px; font-fam ...
- yii2-swiftmailer入门
1. 安装 用yii 2.0框架,默认会有这个扩展 composer require --prefer-dist yiisoft/yii2-swiftmailer 修改composer.json,re ...
- c# gdi+输出成不同mime类型的图片
/// <summary> /// 通过图片的mime类型得到相应的编码器 /// </summary> /// <param name="mimeType&q ...
- java中==与equel的区别
值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地 ...
- sublime addons backup
1.you can create a file to store you installed addons and use git to store github.com just like that ...
- win10 UWP FlipView
FlipView 可以让用户逐个浏览的项目集合 <FlipView Grid.Row="0" Height="100" Margin="10,1 ...
- win10 输入法禁用IME
发现了win10 没法输入,因为禁用IME 右击开始 计算机管理 任务计划程序 打开到Microsoft/Windows/TextServicesFramework 选择操作运行 选择如果任务失 ...
- 【UML 建模】活动图介绍
1.活动图,即Activity Diagram,是UML中用于对系统的动态行为建模的一种常用工具,它描述活动的顺序,展现从一种活动到另一种活动的控制流.其本质上是一种流程图,着重表现从一个活动到另一个 ...
- web开发|如何选择合适的webui框架
在市场中很多人分不清框架和库的区别,部分只知道框架模糊的概念.所以在选择webUI框架的时候就会仁者见仁智者见智,会存在各抒己见也是很正常的,这里整体都叫框架吧,在市场中不断的淘汰与创新,主要以Vue ...
- js修改title
document.title = 'xxxxxx';