zoukankan      html  css  js  c++  java
  • 9.7结构类型

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

    class Chapter09Ex03
        {
            public static void Method()
            {
                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);
            }
        }

    这个应用程序包含两个类型定义。一个是结构myStruct的定义,它有一个public int字段val,另外一个是类MyClass的定义,它包含一个相同的字段(第10章介绍类的成员,如字段,现在只要知道它们的语法是相同的即可)。

    接着对两种类型的实例执行相同的操作:

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

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

    MyClass objectB=objectA;

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

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

    myStruct structB=structA;

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

  • 相关阅读:
    关于Linux启动时挂载rootfs的几种方式【转】
    文件子系统-(rootfs)根文件系统挂载流程03【转】
    linux根文件系统挂载过程【转】
    linux的initrd机制和initramfs机制之根文件挂载流程:代码分析【转】
    ramdisk配置、解压、创建rootfs、启动简单分析【转】
    linux文件系统初始化过程(4)---加载initrd(中)【转】
    Linux内核学习:EXT4 文件系统在 Linux 内核系统中的读写过程【转】
    Flyway数据库版本管理工具的使用
    RabbitMQ消息发送与接收
    RabbitMQ简介以及安装
  • 原文地址:https://www.cnblogs.com/chucklu/p/4055099.html
Copyright © 2011-2022 走看看