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

類和結構是 .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;
        }
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章