C#中類和結構體的區別


結構體和類同樣能夠定義字段,方法和構造函數,都能實例化對象,這樣看來結構體和類的功能好像是一樣的了,但是他們在數據的存儲上是不一樣的(以下摘錄):

C#結構體和類的區別問題:在C#編程語言中,類屬於引用類型的數據類型,結構體屬於值類型的數據類型,這兩種數據類型的本質區別主要是各自指向的內存位置不同。傳遞類的時候,主要表現為是否同時改變了源對象。

C#結構體和類的區別技術要點:

    ◆類在傳遞的時候,傳遞的內容是位於托管內存中的位置,結構體在傳遞的時候,傳遞的內容是位於程序堆棧區的內容。當類的傳遞對象修改時,將同時修改源對象,而結構體的傳遞對象修改時,不會對源對象產生影響。

    ◆在一個類中,可以定義默認的、不帶參數的構造函數,而在結構體中不能定義默認的、不帶參數的構造函數。兩者都可以定義帶有參數的構造函數,通過這些參數給各自的字段賦值或初始化

代碼運行如下:類中賦值以后,兩個對象中的值都發生變化,而結構體原來對象的值為發生變化

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 類對象
{

    //枚舉  
    public enum Gender
    {
        男,
        女
    }
    //結構體
    public struct stuPerson
    {
        public string stuName;
        public int stuAge;
        public Gender stuSex;
        public void stuSayHello()
        {
            Console.WriteLine("我是{0},年齡{1},性別{2}", stuName, stuAge, stuSex);
        }

        //必須定義有參數的構造函數
        public stuPerson(string name, int age, Gender sex)
        {
            this.stuName = name;
            this.stuAge = age;
            this.stuSex = sex;
        }

    }
    class Program
    {
        static void Main(string[] args)
        {
            //實例化類
            Person Liuxiang = new Person();  //無參數的構造函數實例化的對象
            Liuxiang.Name = "劉翔";
            Liuxiang.Age = 30;
            Liuxiang.Sex = Gender.男;
            Liuxiang.SayHello();
            //聲明另一個實例
            Person LXSon = Liuxiang;
            LXSon.Age = 10;
            //查看類 LiuXiang 和 LXSon中字段的值
            Console.WriteLine("LiuXiang 年齡{0}", Liuxiang.Age.ToString());  //10
            Console.WriteLine("LXSon 年齡{0}", LXSon.Age.ToString());    //10

            Console.WriteLine();
            //結構體
            stuPerson YaoMing = new stuPerson("姚明",33,Gender.男);
            YaoMing.stuSayHello();
            stuPerson YMSon = YaoMing;
            YMSon.stuAge = 13;
            //查看結構體中 YaoMing 和 YMSon中字段的值
            Console.WriteLine("YaoMing 年齡{0}", YaoMing.stuAge.ToString());  //10
            Console.WriteLine("YMSon 年齡{0}", YMSon.stuAge.ToString());    //10

            Console.ReadLine();



        }


    }

    class Person
    {

        //定義字段
        public string Name;
        public int Age;
        public Gender Sex;

        //定義方法
        public void SayHello()
        {
            Console.WriteLine("我是{0},年齡{1},性別{2}", this.Name, this.Age, this.Sex);
        }
        //無參數的構造函數
        public Person()
        {

        }
        //有參數的構造函數
        public Person(string name, int age, Gender sex)
        {
            this.Name = name;
            this.Age = age;
            this.Sex = sex;
        }


    }

}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM