• (原创)c#学习笔记09--定义类07--结构类型


    9.7  结构类型

      第8章提到过结构和类非常相似,但结构是值类型,而类是引用类型。这意味着什么?最简明的方式是用一个示例来说明。代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Ch09Ex03
    {
        class MyClass {
            public int val;
        }
    
        struct myStruct {
            public int val;
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                MyClass objectA = new MyClass();
                MyClass objectB = objectA;
                objectA.val = 10;
                objectB.val = 20;
            
                myStruct structA = new myStruct();
                myStruct structB = structA;
                structA.val = 30;
                structB.val = 40;
                Console.WriteLine( "objectA.val = {0}", objectA.val );
                Console.WriteLine( "objectB.val = {0}", objectB.val );
                Console.WriteLine( "structA.val = {0}", structA.val );
                Console.WriteLine( "structB.val = {0}", structB.val );
                Console.ReadKey();
            }
        }
    }

      运行应用程序,其结果如图:

      

      尽管对两种类型的变量执行了相同的操作,但结果是不同的。 在显示val字段的值时,两个object类型有相同的值,而结构类型有不同的值。为什么会这样?

      对象是引用类型。在把对象赋给变量时,实际上是把带有一个指针的变量赋结了该指针所指向的对象。在实际代码中,指针是内存中的一个地址。在这种情况下,地址是内存中该对象所在的位置。在用下面的代码行把第一个对象引用赋给类型为MyClass的第二个变量时,实际上是复制了这个地址。

    MyClass objectB = objectA;

      这样两个变量就包含同一个对象的指针。

      结构是值类型。其变量并不是包含结构的指针,而是包含结构本身。在用下面的代码把第一个结构赋给类型为myStruct的第二个变量时,实际上是把第一个结构的所有信息复制到另一个结构中。

    myStruct structB = structA; 

      最终的结果是两个结构类型变量包含不同的结构。使用指针的全部技术隐藏在托管 C#代码中,它使得代码更简单。使用 C#中的不安全代码可以进行低级操作,如指针操作,但这是一个比较高级的论题,这里不予以讨论。

  • 相关阅读:
    C/C++ 知识点---存储区
    Objective-C中的@property和@synthesize用法
    C/C++ 知识点---数组与指针
    C/C++ 知识点---C语言关键字(32个)
    js里json和eval()
    js--冒泡排序
    js数学公式-曲线运动
    事件绑定兼容(事件流的机制;事件委托
    2 获取元素在页面中的位置
    Dom关于位置和尺寸的api
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/4955705.html
Copyright © 2020-2023  润新知