zoukankan      html  css  js  c++  java
  • 类和结构

    类和结构(C# 编程指南)

    类和结构是 .NET Framework 中的常规类型系统的两种基本构造。 两者在本质上都属于数据结构,封装着一组整体作为一个逻辑单位的数据和行为。 数据和行为是该类或结构的“成员”,它们包含各自的方法、属性和事件等(本主题后面列出了这些内容)。

    类或结构的声明类似于蓝图,用于在运行时创建实例或对象。 如果定义一个名为 Person 的类或结构,则 Person 为类型名称。 如果声明并初始化 Person 类型的变量 p,则 p 称为 Person 的对象或实例。 可以创建同一 Person 类型的多个实例,每个实例在其属性和字段中具有不同的值。

    类是一种“引用类型”。 创建类的对象时,对象赋值到的变量只保存对该内存的引用。 将对象引用赋给新变量时,新变量引用的是原始对象。 通过一个变量做出的更改将反映在另一个变量中,因为两者引用同一数据。

    结构是一种值类型。 创建结构时,结构赋值到的变量保存该结构的实际数据。 将结构赋给新变量时,将复制该结构。 因此,新变量和原始变量包含同一数据的两个不同的副本。 对一个副本的更改不影响另一个副本。

    类通常用于对较为复杂的行为建模,或对要在创建类对象后进行修改的数据建模。 结构最适合一些小型数据结构,这些数据结构包含的数据以创建结构后不修改的数据为主。

    http://msdn.microsoft.com/zh-cn/library/ms173109.aspx

    结构(C# 编程指南)

    结构与类共享大多数相同的语法,但结构比类受到的限制更多:

    • 在结构声明中,除非字段被声明为 const 或 static,否则无法初始化。

    • 结构不能声明默认构造函数(没有参数的构造函数)或析构函数。

    • 结构在赋值时进行复制。 将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。 在使用值类型的集合(如 Dictionary<string, myStruct>)时,请务必记住这一点。

    • 结构是值类型,而类是引用类型。

    • 与类不同,结构的实例化可以不使用 new 运算符。

    • 结构可以声明带参数的构造函数。

    • 一个结构不能从另一个结构或类继承,而且不能作为一个类的基。 所有结构都直接继承自 System.ValueType,后者继承自 System.Object。

    • 结构可以实现接口。

    • 结构可用作可以为 null 的类型,因而可向其赋 null 值。

    http://msdn.microsoft.com/zh-cn/library/saxz13w4.aspx

    使用结构(C# 编程指南)

    struct 类型适于表示 Point、Rectangle 和 Color 等轻量对象。 尽管使用自动实现的属性将一个点表示为同样方便,但在某些情况下使用结构更加有效。 例如,如果声明一个 1000 个 Point 对象组成的数组,为了引用每个对象,则需分配更多内存;这种情况下,使用结构可以节约资源。

    为结构定义默认(无参数)构造函数是错误的。 在结构体中初始化实例字段也是错误的。 只能通过两种方式初始化结构成员:一是使用参数化构造函数,二是在声明结构后分别访问成员。 对于任何私有成员或以其他方式设置为不可访问的成员,只能在构造函数中进行初始化。

    如果使用 new 运算符创建结构对象,则会创建该结构对象,并调用适当的构造函数。 与类不同,结构的实例化可以不使用 new 运算符。 在此情况下不存在构造函数调用,因而可以提高分配效率。 但是,在初始化所有字段之前,字段将保持未赋值状态且对象不可用。

    当结构包含引用类型作为成员时,必须显式调用该成员的默认构造函数,否则该成员将保持未赋值状态且该结构不可用。 (这将导致编译器错误 CS0171。)

    对于结构,不像类那样存在继承。 一个结构不能从另一个结构或类继承,而且不能作为一个类的基。 但是,结构从基类 Object 继承。 结构可实现接口,其方式同类完全一样。

    无法使用 struct 关键字声明类。 在 C# 中,类与结构在语义上是不同的。 结构是值类型,而类是引用类型。 有关更多信息,请参见值类型

    除非需要引用类型语义,将较小的类声明为结构,可以提高系统的处理效率。

  • 相关阅读:
    POJ 1251 Jungle Roads
    1111 Online Map (30 分)
    1122 Hamiltonian Cycle (25 分)
    POJ 2560 Freckles
    1087 All Roads Lead to Rome (30 分)
    1072 Gas Station (30 分)
    1018 Public Bike Management (30 分)
    1030 Travel Plan (30 分)
    22. bootstrap组件#巨幕和旋转图标
    3. Spring配置文件
  • 原文地址:https://www.cnblogs.com/Sabre/p/3797288.html
Copyright © 2011-2022 走看看