类和结构

来源:互联网 发布:tcp端口阻塞 编辑:程序博客网 时间:2024/05/22 03:11

类和结构是 .NET Framework 中的常规类型系统的两种基本构造。 两者在本质上都属于数据结构,封装着一组整体作为一个逻辑单位的数据和行为。 数据和行为是该类或结构的“成员”,它们包含各自的方法、属性和事件等

类是一种“引用类型

 创建类的对象时,对象赋值到的变量只保存对该内存的引用。将对象引用赋给新变量时,新变量引用的是原始对象。通过一个变量做出的更改将反映在另一个变量中,因为两者引用同一数据。

由于类是引用类型,因此类对象的变量引用该对象在托管堆上的地址。如果将同一类型的第二个对象分配给第一个对象,则两个变量都引用该地址的对象。

public class Person{    public string Name { get; set; }    public int Age { get; set; }    public Person(string name, int age)    {        Name = name;        Age = age;    }    //Other properties, methods, events...}class Program{    static void Main()    {        Person person1 = new Person("Leopold", 6);        Console.WriteLine("person1 Name = {0} Age = {1}", person1.Name, person1.Age);        // Declare  new person, assign person1 to it.        Person person2 = person1;        //Change the name of person2, and person1 also changes.        person2.Name = "Molly";        person2.Age = 16;        Console.WriteLine("person2 Name = {0} Age = {1}", person2.Name, person2.Age);        Console.WriteLine("person1 Name = {0} Age = {1}", person1.Name, person1.Age);        // Keep the console open in debug mode.        Console.WriteLine("Press any key to exit.");        Console.ReadKey();    }}/*    Output:    person1 Name = Leopold Age = 6    person2 Name = Molly Age = 16    person1 Name = Molly Age = 16*/


 

 

结构是一种“值类型

 

 创建结构时,结构赋值到的变量保存该结构的实际数据。将结构赋给新变量时,将复制该结构。 因此,新变量和原始变量包含同一数据的两个不同的副本。 对一个副本的更改不影响另一个副本。

由于结构是值类型,因此结构对象的变量具有整个对象的副本。结构的实例也可以使用 new 运算符来创建,但这不是必需的,如下面的示例所示

public struct Person{    public string Name;    public int Age;    public Person(string name, int age)    {        Name = name;        Age = age;    }}public class Application{    static void Main()    {        // Create  struct instance and initialize by using "new".        // Memory is allocated on thread stack.        Person p1 = new Person("Alex", 9);        Console.WriteLine("p1 Name = {0} Age = {1}", p1.Name, p1.Age);        // Create  new struct object. Note that  struct can be initialized        // without using "new".        Person p2 = p1;        // Assign values to p2 members.        p2.Name = "Spencer";        p2.Age = 7;        Console.WriteLine("p2 Name = {0} Age = {1}", p2.Name, p2.Age);        // p1 values remain unchanged because p2 is  copy.        Console.WriteLine("p1 Name = {0} Age = {1}", p1.Name, p1.Age);        // Keep the console open in debug mode.        Console.WriteLine("Press any key to exit.");        Console.ReadKey();    }}/*  Output:    p1 Name = Alex Age = 9    p2 Name = Spencer Age = 7    p1 Name = Alex Age = 9*/