Posted on 2007-08-23 13:24
停留的風(fēng) 閱讀(404)
評(píng)論(0) 編輯 收藏 所屬分類:
C#學(xué)習(xí)歷程
結(jié)構(gòu)和類非常相似,但結(jié)構(gòu)是值類型,而類是引用類型。
對(duì)象是引用類型,在把對(duì)象付給變量時(shí),實(shí)際上是把帶有一個(gè)指針的變量賦給了該指針?biāo)赶虻膶?duì)象,指針是內(nèi)存中的一個(gè)地址。在這種情況下,地址是內(nèi)存中該對(duì)象所在的位置。在用下面的代碼把一個(gè)對(duì)象引用賦給類型為MyClass的第二個(gè)變量時(shí),實(shí)際上是復(fù)制了這個(gè)地址。
myClass objectB=objectA;
這樣兩個(gè)變量就包含同一個(gè)對(duì)象的指針。
結(jié)構(gòu)是值類型,其變量并不是包含節(jié)后的指針,而是包含結(jié)構(gòu)本身。在下面的代碼把第一個(gè)結(jié)構(gòu)賦給類型為myStruct的第二個(gè)變量時(shí),實(shí)際上是把第一個(gè)結(jié)構(gòu)的所有信息復(fù)制到另一個(gè)結(jié)構(gòu)中。
myStruct structB=structA;
使用指針的技術(shù)隱藏在C#代碼中,它使得代碼更簡(jiǎn)單,使用C#中的不安全代碼可以進(jìn)行低級(jí)操作。
using System;
using System.Collections.Generic;
using System.Text;
namespace structAndClass
{
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();
}
}
}
運(yùn)行圖:
