值类型、引用类型 再次理解

简介:  重新理解一下C#中的值类型和引用类型,在以前读《C#高级编程(第三版)》时,也是粗略看了一下,没有在意,直到今天,重新认识了这个东西。 一、值类型:存储在堆栈中;引用类型:存储在托管对上; 二、值类型进行“=”操作时,会创建值类型的复制版本; 值类型: int i = 20; int j= i; Console.

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

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

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

值类型:

int i = 20;

int j= i;

Console.WriteLine(string.Format("i={0}/tj={1}", i.ToString(), j.ToString())); // i = 20,j = 20

j = 30;

Console.WriteLine(string.Format("i={0}/tj={1}", i.ToString(), j.ToString())); // i = 20,j = 30

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

Example exI = new Example ();

exI .i = 20;

Example exJ = exI;

Console.WriteLine(string.Format("exI.i={0}/texJ .i={1}", exI.i.ToString(), exJ .i.ToString())); // 20,20

exJ .i = 30;

Console.WriteLine(string.Format("exI.i={0}/texJ .i={1}", exI.i.ToString(), exJ .i.ToString())); // 30,30

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

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

四、引用类型可以帮助返回函数处理后,类型的值。

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // 外围设置值
            int j = 200;
            string str = "out string";
            example ex = new example(100, "out property");

            // 显示当前值
            Console.WriteLine("Before test():/n/tex.i={0}/tex.str={1}/tj={2}/tstr={3}", ex.i.ToString(), ex.str, j.ToString(), str);

            // 函数中更改值
            test(ex,j,str);

            // 显示调用后值
            Console.WriteLine("After test():/n/tex.i={0}/tex.str={1}/tj={2}/tstr={3}", ex.i.ToString(), ex.str, j.ToString(), str);


            Console.Read();
        }

        private static void test(example ex, int j, string str)
        {
            // 函数内更改各值
            j = 880;                        // 值类型
            str = "inner string";           // 引用类型,表现为值类型 [最特殊]
            ex.i = 880;                     // 引用类型,值类型属性
            ex.str = "inner property";      // 引用类型,引用类型属性

            // 显示更改后的值
            Console.WriteLine("Inner test():/n/tex.i={0}/tex.str={1}/tj={2}/tstr={3}", ex.i.ToString(), ex.str, j.ToString(), str);
        }
    }

    internal class example
    {
        public int i = 0;
        public string str = "example string";

        public example(int j, string s)
        {
            this.i = j;
            this.str = s;
        }
    }
}

 

结果:

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

 

 

目录
相关文章
|
3月前
|
存储 Java C#
C# 中的值类型与引用类型
在 C# 编程中,值类型和引用类型的区别至关重要,直接影响内存管理、性能优化及编程模式选择。值类型直接存储数据(如 `int`、`float`),而引用类型存储数据的引用地址(如 `class`、`string`)。值类型的赋值涉及数据复制,适合小数据量;引用类型仅复制引用,适合大数据量处理但需关注垃圾回收。本文通过具体代码示例详细解析二者的定义、存储方式及性能影响,并提供实战案例分析及易错点避免方法,帮助读者更好地理解和应用。
81 2
|
4月前
|
JavaScript 前端开发
值类型(基本类型)
【8月更文挑战第26天】
34 4
|
存储 C# C++
值类型和引用类型
值类型和引用类型
|
存储 Java Go
值类型和引用类型|学习笔记
快速学习值类型和引用类型。
113 0
值类型和引用类型|学习笔记
再聊一次值类型和引用类型
这是一个托管的值类型,表示array的一个片断, 在用做websocket接收数据的载体时我发现每次值传递后, 这个ArraySegment<byte>貌似发生了变化。这勾起了我的探究欲。
再聊一次值类型和引用类型
|
存储 开发框架 .NET
C#系列之值类型和引用类型
C#系列之值类型和引用类型
172 0
C#系列之值类型和引用类型
|
存储 Java 程序员
C#基础——值类型和引用类型
C#基础——值类型和引用类型
590 0
C#基础——值类型和引用类型
|
存储 数据格式 JSON
第183天:引用类型和值类型
一、内存分配 1、数值型内存分配 1 2 var num1; //这个时候不进行内存分配 3 var num3=9;//分配内存 4 var num4=num3;//会不会分配 5 6 // 这里到底分配还是不分配内存?? 7 // 答案 --分配内存 彼此拥有独立的内存空间,互不影响 8 console.
1013 0
|
算法 C#
c#值类型与引用类型区别
值类型对象的两种表示方式:未装箱和已装箱,引用类型总是处于已装箱 值类型从System.ValueType派生。该类型提供了与System.Object相同方法,但System.ValueType重写了Equals方法, 能在两个对象的自断值完全匹配的前提下返回true。
973 0