结构类

3 本我 1天前 50次点击

示例

namespace 录音1

{

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;

WriteLine($"objectA.val={objectA.val}");

WriteLine($"objectB.val={objectB.val}");

WriteLine($"structA.val={structA.val}");

WriteLine($"structB.val={structB.val}");

ReadKey();

}

}

}

这个应用程序包含两个类型定义:一个是结构myStruct的定义,它有一个公共int字段val;另一个是类MyClass的定义,它包含一个相同的字段,接着对这两种类型的实例执行相同的操作:

(1)声明类型的一个变量。

(2)在这个变量中创建该类型的新实例。

(3)声明类型的第二个变量。

(4)将第一个变量赋给第二个变量。

(5)在第一个变量的实例中,给val字段赋予一个值。

(6)在第二个变量的实例中,给val字段赋予一个值。

(7)显示这两个变量的val字段值。

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

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

MyClass objectB = objectA;

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

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

myStruct structB = structA;

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


目前还没有评论
添加一条新评论

登录后可以发表评论 去登录