“结构”或“记录”概念是在“类”概念之前创建的。有时,可以互换。
何时使用结构的变量、字段或实例:
(1) 当只有数据成员需要它时,没有方法。或者很少有很少使用的方法,例如构造函数。
例子:
struct CoordinateStruct
{
  int X;
  int Y;
}
(2) 当需要大量元素时,由于对象使用额外的内存,有时是不可见的,将方法迁移到容器元素,例如另一个对象、类似模块(命名空间)的对象或单例对象(享元设计图案)。
前:
class PointClass
{
  int X;
  int Y;
  // its also an object / class
  Color Color;
  public void assign(int NewX, int NewY, Color NewColor) { ... }
  public void move(int addX, int addNewY) { ... }
}
// multiple element container
class CADAppClass
{
  List<Point> Points;
 // ...
}
// Not enough memory Exception !!!
后:
struct PointStruct
{
  int X;
  int Y;
  // its a low memory integer
  int Color;      
}
// multiple element container
class CADAppClass
{
  List<Point> Points;
  public void assignPoint
    (ref PointStruct Point, int NewX, int NewY, Color NewColor) { ... }
  public void movePoint
    (ref PointStruct Point, int addX, int addNewY) { ... }
 // ...
}
(3) 当你需要封装数据元素时,即使是少量的元素,在一个变量中,即使有方法、操作符、事件或“消息”。封装,可能以序列化为例(从 DLL、DCOM、JSON、纯数据文件加载)。
前:
class CustomerClass
{
  String FirstName;
  String LastName;
  public void Store(Stream Destination) { ... }
  public void Load(Stream Source) { ... }
  public void CopyTo(CustomerClass Destination) { ... }
  public void CopyFrom(CustomerClass Source) { ... }
}
后:
struct CustomerStruct
{
  char[100] FirstName;
  char[100] LastName;
}
// one to one, nested, relationship, seems redudant,
// but required
Class CustomerClass
{
  CustomerStruct Data;
  public void Store(Stream Destination) { ... }
  public void Load(Stream Source) { ... }
  public void CopyTo(CustomerStruct Destination) { ... }
  public void CopyFrom(CustomerStruct Source) { ... }
}
我在面向对象和类的编程语言中使用了这个枚举,而不是结构,但是,它不像 Java 或 C# 那样将枚举视为对象(例如:面向对象的 PHP 和对象 Pascal)。
(4) 前面的案例或场景的混合,没有考虑。
干杯。