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

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

原文地址:http://blog.51cto.com/13758648/2121267

时间: 2024-10-25 16:52:42

结构和类的区别及结构的使用的相关文章

结构和类的区别

本文转自:http://blog.csdn.net/lianchangshuai/article/details/5810249 1.结构用于小的数据类型,所有结构派生自System.ValueType类,不能再继承其它基类,同时也不能被继承. 而类一般用于大的数据类型如人类,动物类等,支持继承. 2.结构和类一样可以有成员方法,字段.3.结构中的成员字段不能被显式初始化,要通过默认无参构造器初始化,而类的字段可以显示初始化,默认由无参构造器初始化. 4.结构的无参构造器总是存在,无论是否手动添

C#中结构与类的区别

一.类与结构的示例比较: 结构示例: 1 public struct Person 2 { 3 string Name; 4 int height; 5 int weight 6 public bool overWeight() 7 { 8 //implement something 9 } 10 } 类示例: 1 public class TestTime 2 { 3 int hours; 4 int minutes; 5 int seconds; 6 7 public void passti

C++中结构和类的区别

首先从从语言角度来看,c语言是一种结构化的语言,便于按照模块化的方式来组织程序,易于程序员的调试和维护,而对于c++来说,我么可以认为它是标准c的超集.实际上所有的c程序也是c++程序.但两者之间还是有少量的区别. 区别: 结构是C语言中的一种数据的组合的形式,c++从c中继承了结构.在语法上,类与结构类似.在关系上,两者也是很接近的.在c++中,结构的作用被拓宽了.在一定的程度上结构成了一种类的代替方法.实际上,类与结构的唯一却别就是在默认状态下,结构的所有成员均是公有的.而类的所有成员是私有

.net(C#)中结构和类的区别

static void Main(string[] args) { //类型 //结构:值类型 //类:引用类型 //声明的语法:class struct //在类中,构造函数里,既可以给字段赋值,也可以给属性赋值.构造函数是可以重载的 //但是,在结构的构造函数当中,必须只能给字段赋值. //在结构的构造函数当中,我们需要给全部的字段赋值,而不能去选择的给字段赋值 //调用: PersonClass pc = new PersonClass(); //结构是否可以New? //在栈开辟空间 结

结构与类的区别

1.结构中可以声明字段,但是不能够给字段初始值 public struct Point { private int x; x = 1; //错误 1 类.结构或接口成员声明中的标记"="无效 public Point(int x) { this.x = x; } } 在类中声明一个字段之后也是不能够为其赋值的 public class RefPoint { private int x { set; get; } public int y; y = 12;//错误 1 类.结构或接口成员

.NET中结构与类的区别

.NET中的类型有5中:类.结构.枚举.接口和委托.而类和结构有着很大的相似性,都可以拥有向字段.方法这样的成员. 但是,类和结构还是有很多不同的. 1)结构是 值类型,而类确是引用类型的. 2)结构不支持继承. 3)因为结构是 值类型的,所以两个变量不能指向同一结构实例. 4)引用类型可以为空(null),但却不能给值类型赋值为空,会导致编译出错 例如 System.DataTime是一个结构,以下是错误的 System.dataTime today = null;     //Wrong 为

C# 结构与类的区别

一.定义方式 定义结构: struct PointStruct //默认的访问权限是 public { public int X { get; set; } public int Y { get; set; } public PointClass(int x, int y) { X = x; Y = y; } } 定义类: class PointClass //默认的访问权限是 private { public int X { get; set; } public int Y { get; se

c# 如何调用非托管函数2-传递结构和类

在上一篇c# 如何调用非托管函数 中介绍了调用非托管函数的简单方法,其中传递的都是简单的值类型,如uint等.本篇将介绍如何传递结构或类到非托管函数. 以系统函数 GetSystemTime 为例,以下分别演示了如何传递结构和类. 一 传递结构 参考MSDN可以知道他的定义为: void WINAPI GetSystemTime(__out LPSYSTEMTIME lpSystemTime); 其中LPSYSTEMTIME就是一个结构体: C++-Code: typedef struct _S

C#中结构与类VS结构

C# 结构的特点 您已经用了一个简单的名为 Books 的结构.在 C# 中的结构与传统的 C 或 C++ 中的结构不同.C# 中的结构有以下特点: 结构可带有方法.字段.索引.属性.运算符方法和事件. 结构可定义构造函数,但不能定义析构函数.但是,您不能为结构定义默认的构造函数.默认的构造函数是自动定义的,且不能被改变. 与类不同,结构不能继承其他的结构或类. 结构不能作为其他结构或类的基础结构. 结构可实现一个或多个接口. 结构成员不能指定为 abstract.virtual 或 prote