结构 3个月前

编程语言
310
结构

结构

  在一个要介绍的变量类型是结构( struct,structure的缩写 )。结构就是由几个数据组成的数据结构,这些数据可能具有不同的类型。根据这个结构,可以定义自己的变量类型。例如,假定要存储从起点开始到某一位置的路径,其中路径由一个方向和一个距离值(英里)组成。为简单起见,假定该方向是指南针上的一点(这样,方向就可以用上一节的 orientation 枚举来表示),距离值可以用一个 double 类型来表示。

  通过前面的代码,可用两个不同的变量来表示该路径:

orientation myDirection;
double myDistance;

  像这样使用两个变量,是没有错误的,但在一个地方存储这些信息更加简单(在需要多个路径时,就尤为简单)。

####定义结构

  使用 struct 关键字来定义结构,如下所示:

struct <typeName>
{
    <memberDeclarations>
}

  <memberDeclarations> 部分包含变量的声明(称为结构的数据成员),其格式与前面的变量声明一样。每个成员的声明都采用如下形式:

<accessbility> <type> <name>;

  要让调用结构的代码访问该结构的数据成员,可以对 <accesssibility> 使用关键字 public,例如:

struct rout
{
    public orientation direction;
    public double distance;
}

  定义结构类型后,就可以定义该结构类型的变量:

rout myRoute;

  还可以通过句点字符访问这个组合变量中的数据成员:

myRoute.direction = orientation.north;
myRoute.distance = 2.5;

  把这个类型放在下面的 “试一试”示例中,其中使用上一节的 orientation 枚举和上面的 route 结构。本例在代码中处理这个结构,以便你了解结构的工作原理。

将下列代码添加到 Program.cs 中:

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\n2) South\n3) East\n4) 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();
        }
    }
}

示例的说明   结构和枚举一样,也是在代码的主体之外声明的。在名称空间声明 route 结构及其使用的 orientation 枚举:

enum orientation : byte
{
    north = 1,
    south = 2,
    east = 3,
    west = 4
}
struct route
{
    public orientation direction;
    public double distance;
}

  代码的主体结构与前面的一些示例类似,要求用户输入一些信息,并显示它们。把方向选择放在 do 循环中,对用户的输入进行有效性的检查,拒绝不属于 1~4 范围的整数输入(选择该范围中的值可以映射到枚举成员,从而方便赋值)。

  不能解释为整数的输入会导致一个错误。本章后面会说明其原因和处理方法。

  注意 ⚠️,在引用 route 的成员时,处理它们的方式与处理和成员类型相同的变量完全一样。赋值语句如下所示:

myRoute.direction = (orientation)myDirection;
myRoute.distance = myDistance;

  可直接把输入的值放到 myRoute.distance 中,而不会有负面效果,如下所示:

myRoute.distance = Convert.ToDouble(Console.ReadLine());

  还应进行有效性验证,但这段代码不存在这一步骤。对结构成员的任何访问都以相同的方式处理。 <structVar>.<memberVar> 形式的表达式可计算 <memberVar> 类型的变量。

image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2223173
累计阅读

热门教程文档

Djiango
17小节
C#
57小节
Javascript
24小节
Kotlin
68小节
Swift
54小节