5.2.2 结构
结构就是由几个数据组成的数据结构,这些数据可能具有不同的类型。根据这个结构,可以定义自己的变量类型。例如,假定要存储从起点开始到某一位置的路径,其中路径由一个方向和一个距离值(英里)组成。为简单起见,假定该方向是指南针上的一点(这样,方向就可以用上一节的orientation枚举来表示),距离值可以用一个double类型来表示。
通过前面的代码,可以用两个不同的变量来表示该路径:
orientation myDirection; double myDistance;
像这样使用两个变量,是没有错误的,但在一个地方存储这些信息应该更为简单(特别是在需要多个路径时,就更为简单)。
使用struct关键字来定义结构,如下所示:
struct <typeName> { <memberDeclarations> }
<memberDeclarations>部分包含变量的声明(称为结构的数据成员),其格式与往常一样。每个成员的声明都采用如下形式:
<accessibility> <type> <name>;
要让调用结构的代码访问该结构的数据成员,可以对<accessibility>使用关键字public,例如:
struct route { public orientation direction; public double distance; }
定义了结构类型后,就可以定义新类型的变量,来使用该结构:
route myRoute;
还可以通过句点字符访问这个组合变量中的数据成员:
myRoute.direction = orientation.north; myRoute.distance = 2.5;
我们看下示例,代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ch05Ex03 { enum orientation : byte { north = 1, south = 2, east = 3, west = 4 } struct route { public orientation direction; public double distance; } class Program { static void Main(string[] args) { route myRoute; int myDirection = -1; double myDistance; Console.WriteLine("1) North 2) South 3) East 4) West"); do { Console.WriteLine("Select a direction:"); myDirection = Convert.ToInt32(Console.ReadLine()); } while ((myDirection < 1) || (myDirection > 4)); Console.WriteLine("Input a distance:"); myDistance = Convert.ToDouble(Console.ReadLine()); myRoute.direction = (orientation)myDirection; myRoute.distance = myDistance; Console.WriteLine("myRoute specifies a direction of {0} and a distance of {1}", myRoute.direction, myRoute.distance); Console.ReadKey(); } } }
运行结果如下: