【C#基础】枚举(Enum)、结构体(Struct)、委托(Delegate)

1.枚举(Enum)

确定数量,确定取值。方向(东南西北),性别(男女)
语法:
[public] enum 枚举名
{
    值1,
    值2,
    值3,
    ........
}

public:访问修饰符。公开的公共的,哪都可以访问。
enum:关键字,声明枚举的关键字
枚举名:要符合Pascal命名规范

将枚举声明到命名空间的下面,类的外面,表示这个命名空间下,所有的类都可以使用这个枚举。

枚举就是一个变量类型 ,int--double  string  decimal。只是枚举声明、赋值、使用的方式跟那些普通的变量类型不一样。

我们可以将一个枚举类型的变量跟int类型和string类型互相转换。
枚举类型默认是跟int类型相互兼容的,所以可以通过强制类型转换的语法互相转换。
当转换一个枚举中没有的值的时候,不会抛异常,而是直接将数字显示出来。

枚举同样也可以跟string类型互相转换,如果将枚举类型转换成string类型,则直接调用ToString().
如果将字符串转换成枚举类型则需要下面这样一行代码:
    (要转换的枚举类型)Enum.Parse(typeof(要转换的枚举类型),"要转换的字符串");
如果转换的字符串是数字,则就算枚举中没有,也会不会抛异常。
如果转换的字符串是文本,如果枚举中没有,则会抛出异常。

    enum GameState//定义枚举类型的游戏状态
    {
        Start,//开始,默认代表的整数是0
        Pause,//暂停,默认代表的整数是1
        Stop//结束,默认代表的整数是2
    }

    class Program
    {
        static void Main(string[] args)
        {
            GameState state = GameState.Start;//利用定义好的枚举类型去声明变量
            if (state != GameState.Stop)//枚举类型比较
            {
                state = GameState.Stop;
                Console.WriteLine("游戏结束");
            }
            Console.ReadKey();
        }
    }

2.结构体(Struct)

可以帮助我们一次性声明多个不同类型的变量。我们可以把结构体当成几个类型组成了一个类型
 

   enum Direction//定义一个枚举类型的方向
    {
        East,
        West,
        North,
        South
    }

    struct Path//定义一个结构类型的路径,包含两个字段,枚举类型的方向和float类型的距离
    {
        public Direction direction;
        public float distance;
    }

    class Program
    {
        static void Main(string[] args)
        {
            Path path;//利用定义好的结构声明一个结构变量
            path.direction = Direction.South;
            path.distance = 1000f;
        }
    }

3.委托(Delegate)
委托是一种存储函数的引用类型,委托的本质也是一个函数
委托的定义指定了一个返回值类型和一个参数列表
委托的定义需要使用关键字Delegate,委托没有函数体
可以把一个函数直接赋值给委托,但该函数的返回值和参数类型必须和委托一致

    public delegate int MyDelegate(params int[] nums);//定义一个委托
    class Program
    {
        //数组求和
        public static int Getsum(params int[] nums)
        {
            int sum = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                sum += nums[i];
            }
            return sum;
        }
        static void Main(string[] args)
        {
            MyDelegate de;
            de = Getsum;//让委托指向函数Getsum
            int sum = de(10, 20, 30, 40);
            Console.WriteLine(sum);
            Console.ReadKey();
        }
    }

除了我们自己定义的委托之外,C#还有定义了两种内置的委托类型,Action和Func
Action委托可以有参数,但不能有返回值

Action<int> a;//int表示参数类型

Func委托既有参数,也有返回值

Func<int, int, int> f;//<>号中,最后一个泛型表示返回值类型,前面的泛型表示参数类型

猜你喜欢

转载自blog.csdn.net/yf391005/article/details/83616750