对C#数据类型的简单理解(value与ref区别、ref与out区别)

值类型:1、简单类型(整型(byte、sbyte、long、ulong、short、ushort、 int、uint)、浮点数类型(float、double)、十进制类型(decimal)、字符类型(char)、布尔型(bool)) 2、枚举类型(enum) 3、结构类型(struct) 4、可以为null的类型

引用类型:1、类类型(class、object、string)2、接口类型(interface) 3、数组类型(array) 4、委托类型(delegate)

值类型数据的每个变量,都有自己的数据副本,因此对一个变量的操作不影响另一个变量。当在所调用的方法中修改该变量值时,修改的只是它的副本,而本身却没变,将该值输出还是原来的值。

引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。

下面实例来体现:

View Code
 1 class DataType
 2     {
 3         class A
 4         {
 5             public int Value = 0;
 6         }
 7 
 8         static void Main(string[] args)
 9         {
10             //所调用的方法中修改该变量值时,修改的只是它的副本
11             int num = 6;
12             changV(num);//ref num
13             Console.WriteLine(num);
14 
15             //对一个变量的操作不影响另一个变量
16             int V1 = 0;
17             int V2 = V1;
18             V2 = 123;
19 
20             //对一个变量的操作可能影响另一个变量所引用的对象
21             A ref1 = new A();
22             A ref2 = ref1;
23             ref2.Value = 123;
24             Console .WriteLine ("Values:{0},{1}",V1,V2 );
25             Console.WriteLine("Refs:{0},{1}", ref1.Value, ref2.Value); 
26             Console.Read();
27         }
28 
29         public static void changV(int Num)//ref int Num
30         {
31             Num = 8;
32         }
33     }

将changV方法的参数改成引用类型参数,参照注释所示,运行一次,就能真正理解值类型与引用类型区别

接下来说一下ref与out区别:

1、使用ref型参数时传入的参数必须先被初始化,对out面言,必须在方法中对其完成初始化(changV改成引用类型参数,如果不给‘num’赋初值会报错)。

2、out适合用在需要return多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用对象(changV改成引用类型参数,就能改变‘num’值了)。

View Code
 1 static void Main(string[] args)
 2         {
 3             //TryParse需要返回两个值,一、是否转换成功,bool型的,二、转换后的值,这里就是用输出参数‘iNum’接收转换后的值的
 4             int iNum;//无需初始化
 5             if (!int.TryParse("5s", out iNum))
 6             {
 7                 Console.WriteLine("对不起,转换不成功!");
 8             }
 9             else
10             {
11                 Console.WriteLine(iNum.ToString());
12             }
13        }

将‘5s’改成数值型的,就能输出‘iNum’值了。

 

转载于:https://www.cnblogs.com/pfcan66/archive/2012/09/17/2688815.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 的 `ref` 和 `out` 关键字都可以用于方法参数传递,但它们有以下几点区别: 1. `ref` 关键字用于将变量按引用传递给方法,即在方法内部可以修改变量的值,并且方法调用后原变量的值也会被修改。而 `out` 关键字也用于将变量按引用传递,但它要求方法必须在方法内部为变量赋值,即方法调用后原变量的值会被修改。 2. `ref` 关键字在方法调用时需要先初始化变量,即在调用方法之前必须为变量赋初值。而 `out` 关键字则不要求变量在调用方法之前被初始化,因为方法会为其赋值。 3. `ref` 关键字在方法内部可以修改变量的值,但在方法返回后变量的值会被保留。而 `out` 关键字在方法返回前必须为变量赋值,因此方法返回后变量的值一定是被赋值后的值。 以下是 `ref` 和 `out` 的使用示例: ```csharp public void TestRef(ref int value) { value = value * 2; } public void TestOut(out int value) { value = 10; value = value * 2; } // 使用ref关键字 int x = 5; TestRef(ref x); Console.WriteLine(x); // 输出10 // 使用out关键字 int y; TestOut(out y); Console.WriteLine(y); // 输出20 ``` 在上面的示例,`TestRef` 方法使用了 `ref` 关键字,将参数 `value` 按引用传递给方法。在方法内部修改了 `value` 的值后,原变量 `x` 的值也被修改了。 而 `TestOut` 方法使用了 `out` 关键字,要求方法必须在方法内部为变量赋值。因此,方法调用后变量 `y` 的值被赋值为 10,并在方法内部将其乘以 2,最终输出结果为 20。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值