1. 程式人生 > >結構和類的區別及結構的使用

結構和類的區別及結構的使用

類和結構是 .NET Framework 中的常規型別系統的兩種基本構造。 兩者在本質上都屬於資料結構。封裝著一組總體作為一個邏輯單位的資料和行為。 資料和行為是該類或結構的“成員”,它們包括各自的方法、屬性和事件等

與類不同的是,結構體用struct 修飾;結構體中的例項欄位不能自定義預設值,而類可以,編譯器會隱式的給出結構體和類的預設建構函式,但是結構體的預設構造不能顯示給出,不然編譯器會報錯,當類有自定義的建構函式時,預設構造會被隱藏,要想使用預設構造,必須顯示給出;結構體的自定義建構函式必須初始化所有的例項欄位和未初始化的屬性,而類不是.

類在傳遞的時候,傳遞的內容是位於託管記憶體中的位置,結構體在傳遞的時候,傳遞的內容是位於程式堆疊區的內容。當類的傳遞物件修改時,將同時修改源物件,而結構體的傳遞物件修改時,不會對源物件產生影響。


這是我總結的結構與類的區別

在 C# 中,結構體是值型別資料結構。它使得一個單一變數可以儲存各種資料型別的相關資料。struct 關鍵字用於建立結構體。

定義一個玩家的結構:

 public struct StructHero
    {
        //玩家名字
        public string HeroName;
        //原始生命值
        public int OriginalBlood;
        //攻擊力
        public int AttackPower;
        //防禦力
        public int DefendPower;
        //玩家的圖片
        public Image Image;
        //原始位置
        public Point OriginalLocation;
        //當前位置
        public Point CurrentLocation;
        // 大小
        public Size Size;




        public void Move(StructMonster monster)
        {
            //移動到怪物左下角
            this.CurrentLocation = new Point(
                monster.OriginalLocation.X,
                monster.OriginalLocation.Y + monster.Size.Height);
        }


        public void Move()
        {
            //返回是將原始位置設為當前位置
            this.CurrentLocation = this.OriginalLocation;
        }

    }

定義一個怪物結構:

public struct StructMonster
    {
        //怪物名字
        public string MonsterName;
        //原始生命值
        public int OriginalBlood;
        //當前生命值
        public int CurrentBlood;
        //攻擊力
        public int AttackPower;
        //防禦力
        public int DefendPower;
        //怪物的圖片
        public Image Image;
        //原始位置
        public Point OriginalLocation;
        //當前位置
        public Point CurrentLocation;
        // 大小
        public Size Size;




        public void Move(StructHero hero)
        {
            //移動到怪物左下角
            this.CurrentLocation = new Point(
                hero.OriginalLocation.X,
                hero.OriginalLocation.Y - hero.Size.Height);
        }


        public void Move()
        {
            //返回是將原始位置設為當前位置
            this.CurrentLocation = this.OriginalLocation;
        }
    }