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

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

 

 

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

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

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

值类型:

 

值类型事例
1int i = 20;
2
3int j= i;
4
5Console.WriteLine(string.Format("i={0}\tj={1}", i.ToString(), j.ToString())); // i = 20,j = 20
6
7= 30;
8
9Console.WriteLine(string.Format("i={0}\tj={1}", i.ToString(), j.ToString())); // i = 20,j = 30

 

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

 

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

 

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

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

 

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

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

40    }

41
42    internal class example
43    {
44        public int i = 0;
45        public string str = "example string";
46
47        public example(int j, string s)
48        {
49            this.i = j;
50            this.str = s;
51        }

52    }

53}

54
55

 

结果:

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

 

 

目录
相关文章
|
7月前
|
存储 C# C语言
C# OOP之五 深入理解值类型和引用类型
C# OOP之五 深入理解值类型和引用类型
27 0
|
3月前
|
安全 编译器 C#
C#中的可空引用类型:减少空引用异常的利器
【1月更文挑战第9天】C# 8.0中引入的可空引用类型特性,它通过在编译时提供更精确的静态分析,帮助开发者减少运行时的空引用异常。文章详细阐述了可空引用类型的工作原理、如何配置项目以使用此特性,以及在实际编码中如何利用可空引用类型提升代码的健壮性和可读性。
|
8月前
|
存储 C# 图形学
代码解析 C# 引用类型还是值类型
代码解析 C# 引用类型还是值类型
|
4月前
|
存储 C#
C# “值类型“和“引用类型“在内存的分配
C# “值类型“和“引用类型“在内存的分配
|
7月前
|
C#
C#由Dictionary赋值引发的对引用类型使用的思考
C#由Dictionary赋值引发的对引用类型使用的思考
|
安全 编译器 C#
30天C#基础巩固-----值类型/引用类型,泛型,空合并操作符(??),匿名方法
30天C#基础巩固-----值类型/引用类型,泛型,空合并操作符(??),匿名方法
85 0
30天C#基础巩固-----值类型/引用类型,泛型,空合并操作符(??),匿名方法
|
编译器 C#
表达式树练习实践:C#值类型、 引用类型、泛型、集合、调用函数
表达式树练习实践:C#值类型、 引用类型、泛型、集合、调用函数
138 0
|
存储 开发框架 .NET
C#系列之值类型和引用类型
C#系列之值类型和引用类型
132 0
C#系列之值类型和引用类型
|
存储 C#
C# 值类型与引用类型 null与可空类型
本文目录 1. 值类型与引用类型 2. null的含义 3. 可空类型
160 0
|
存储 Java 程序员
C#基础——值类型和引用类型
C#基础——值类型和引用类型
550 0
C#基础——值类型和引用类型