C#中值类型、引用类型 再次理解

国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。 
------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

重新理解一下C#中的值类型和引用类型,在以前读《C#高级编程(第三版)》时,也是粗略看了一下,没有在意,直到今天,重新认识了这个东西。

一、值类型:存储在堆栈中;引用类型:存储在托管对上;

二、值类型进行“=”操作时,会创建值类型的复制版本;

值类型:

 

C#中值类型、引用类型 再次理解C#中值类型、引用类型 再次理解值类型事例
1C#中值类型、引用类型 再次理解int i = 20;
2C#中值类型、引用类型 再次理解
3C#中值类型、引用类型 再次理解int j= i;
4C#中值类型、引用类型 再次理解
5C#中值类型、引用类型 再次理解Console.WriteLine(string.Format("i={0}\tj={1}", i.ToString(), j.ToString())); // i = 20,j = 20
6C#中值类型、引用类型 再次理解
7C#中值类型、引用类型 再次理解= 30;
8C#中值类型、引用类型 再次理解
9C#中值类型、引用类型 再次理解Console.WriteLine(string.Format("i={0}\tj={1}", i.ToString(), j.ToString())); // i = 20,j = 30

 

引用类型:[ 建设已经定义了一个 Example 类 ]

 

C#中值类型、引用类型 再次理解C#中值类型、引用类型 再次理解引用类型事例
 1C#中值类型、引用类型 再次理解Example exI = new Example ();
 2C#中值类型、引用类型 再次理解
 3C#中值类型、引用类型 再次理解exI .i = 20;
 4C#中值类型、引用类型 再次理解
 5C#中值类型、引用类型 再次理解Example exJ = exI;
 6C#中值类型、引用类型 再次理解
 7C#中值类型、引用类型 再次理解Console.WriteLine(string.Format("exI.i={0}\texJ .i={1}", exI.i.ToString(), exJ .i.ToString())); // 20,20
 8C#中值类型、引用类型 再次理解
 9C#中值类型、引用类型 再次理解exJ .i = 30;
10C#中值类型、引用类型 再次理解
11C#中值类型、引用类型 再次理解Console.WriteLine(string.Format("exI.i={0}\texJ .i={1}", exI.i.ToString(), exJ .i.ToString())); // 30,30
12C#中值类型、引用类型 再次理解

 

[说明:引用类型中,不用 string 做事例是因为它太特殊了,最主要的是自己还没有弄清楚这个东西,但是直到一点:“string 是引用类型,表现上却是值类型的特征。”,不知道为什么这么说?]

三、理解值类型和引用类型。值类型就是基本类型,int,long,double,bool,struct,enum 都是值类型;引用类型就是string 和自定义类 [面向对象里面的对象],可以将引用类型看成C++ 或 C中的指针,都指向内存中的一个地址,修改任何一个指向这个地址对象,其他的对象值都改变。这个东西的监视是由CLR负责接管的,不用我们操心了。

 

C#中值类型、引用类型 再次理解C#中值类型、引用类型 再次理解值类型、引用类型理解
 1C#中值类型、引用类型 再次理解using System;
 2C#中值类型、引用类型 再次理解using System.Collections.Generic;
 3C#中值类型、引用类型 再次理解using System.Text;
 4C#中值类型、引用类型 再次理解
 5C#中值类型、引用类型 再次理解namespace ConsoleTest
 6C#中值类型、引用类型 再次理解C#中值类型、引用类型 再次理解C#中值类型、引用类型 再次理解{
 7C#中值类型、引用类型 再次理解    class Program
 8C#中值类型、引用类型 再次理解C#中值类型、引用类型 再次理解    C#中值类型、引用类型 再次理解{
 9C#中值类型、引用类型 再次理解        static void Main(string[] args)
10C#中值类型、引用类型 再次理解C#中值类型、引用类型 再次理解        C#中值类型、引用类型 再次理解{
11C#中值类型、引用类型 再次理解            // 外围设置值
12C#中值类型、引用类型 再次理解            int j = 200;
13C#中值类型、引用类型 再次理解            string str = "out string";
14C#中值类型、引用类型 再次理解            example ex = new example(100"out property");
15C#中值类型、引用类型 再次理解
16C#中值类型、引用类型 再次理解            // 显示当前值
17C#中值类型、引用类型 再次理解            Console.WriteLine("Before test():\n\tex.i={0}\tex.str={1}\tj={2}\tstr={3}", ex.i.ToString(), ex.str, j.ToString(), str);
18C#中值类型、引用类型 再次理解
19C#中值类型、引用类型 再次理解            // 函数中更改值
20C#中值类型、引用类型 再次理解            test(ex,j,str);
21C#中值类型、引用类型 再次理解
22C#中值类型、引用类型 再次理解            // 显示调用后值
23C#中值类型、引用类型 再次理解            Console.WriteLine("After test():\n\tex.i={0}\tex.str={1}\tj={2}\tstr={3}", ex.i.ToString(), ex.str, j.ToString(), str);
24C#中值类型、引用类型 再次理解
25C#中值类型、引用类型 再次理解
26C#中值类型、引用类型 再次理解            Console.Read();
27C#中值类型、引用类型 再次理解        }

28C#中值类型、引用类型 再次理解
29C#中值类型、引用类型 再次理解        private static void test(example ex, int j, string str)
30C#中值类型、引用类型 再次理解C#中值类型、引用类型 再次理解        C#中值类型、引用类型 再次理解{
31C#中值类型、引用类型 再次理解            // 函数内更改各值
32C#中值类型、引用类型 再次理解            j = 880;                        // 值类型 
33C#中值类型、引用类型 再次理解            str = "inner string";           // 引用类型,表现为值类型 [最特殊]
34C#中值类型、引用类型 再次理解            ex.i = 880;                     // 引用类型,值类型属性
35C#中值类型、引用类型 再次理解            ex.str = "inner property";      // 引用类型,引用类型属性
36C#中值类型、引用类型 再次理解
37C#中值类型、引用类型 再次理解            // 显示更改后的值
38C#中值类型、引用类型 再次理解            Console.WriteLine("Inner test():\n\tex.i={0}\tex.str={1}\tj={2}\tstr={3}", ex.i.ToString(), ex.str, j.ToString(), str);
39C#中值类型、引用类型 再次理解        }

40C#中值类型、引用类型 再次理解    }

41C#中值类型、引用类型 再次理解
42C#中值类型、引用类型 再次理解    internal class example
43C#中值类型、引用类型 再次理解C#中值类型、引用类型 再次理解    C#中值类型、引用类型 再次理解{
44C#中值类型、引用类型 再次理解        public int i = 0;
45C#中值类型、引用类型 再次理解        public string str = "example string";
46C#中值类型、引用类型 再次理解
47C#中值类型、引用类型 再次理解        public example(int j, string s)
48C#中值类型、引用类型 再次理解C#中值类型、引用类型 再次理解        C#中值类型、引用类型 再次理解{
49C#中值类型、引用类型 再次理解            this.i = j;
50C#中值类型、引用类型 再次理解            this.str = s;
51C#中值类型、引用类型 再次理解        }

52C#中值类型、引用类型 再次理解    }

53C#中值类型、引用类型 再次理解}

54C#中值类型、引用类型 再次理解
55C#中值类型、引用类型 再次理解

 

结果:

Before test():
        ex.i=100        ex.str=out property     j=200   str=out string
Inner test():
        ex.i=880        ex.str=inner property   j=880   str=inner string
After test():
        ex.i=880        ex.str=inner property   j=200   str=out string

 

 

上一篇:如何对Exadata的I/O进行性能校准测试


下一篇:阿里ACE深圳同城会——塘朗山穿越