结构和类的区别及结构的使用

类和结构是 .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;
        }
    }

 

posted @ 2018-12-16 18:57  程沐喆  阅读(358)  评论(0编辑  收藏  举报