C#学习笔记(四):结构类型

我们首先看一个例子:

using System;
 
namespace Ch09Ex03
{
     class MyClass
     {
         public int val;
     }
 
     struct myStruct
     {
         public int val;
     }
     /// <summary>
     /// Class1 的摘要说明。
     /// </summary>
     class Class1
     {
         /// <summary>
         /// 应用程序的主入口点。
         /// </summary>
         [STAThread]
         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);
         }
     }
}

编译执行后他的结果是这样的:


尽管对两种类型的变量执行了相同的操作,但结果是不同的。这是因为:

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

结构是值类型。其变量并不是包含结构的指针,而是包含结构本身。在把第一个结构赋给类型为mystruct的第二个变量时,实际上是把第一个结构的所有信息复制到另一个结构中。这个过程与简单变量类型如int是一样的。最终的结果是两个结构类型变量包含不同的结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值