C# (初入江湖)-结构&枚举(原来这么写是这个意思)
2023-09-11 14:14:49 时间
C# (初入江湖) -结构&枚举
结构(struct)
结构类型
- 是一种可封装数据和相关功能的值类型
- 结构不能包含无参构造方法
- 每个字段在定义时,不能给初始值
- 构造方法中,必须对每个字段进行赋值
- 使用 struct 关键字定义结构类型
public struct Point
{
// 多个相同类型的变量声明中间用 逗号 隔开
public double x,y;
public Point(double x, double y)
{
this.X = x;
this.Y = y;
}
public override string ToString() => $"({X}, {Y})";
}
- struct实例化时,使用new关键字 ,但与引型变量不同的是,值类型变量在赋值的时候,本质上是字段的copy
// 声明结构实例
Point point = new Point(1,2);
// 结构的赋值
Point p1,p2;
p1=p2; // 注:此处不是将 p2的引用赋值给p1,而是在p1中将p2中的字段都copy了一份到P1里面
- struct是sealed的,不能被继承
- 由于结构类型具有值语义,因此建议定义不可变的结构类型
readonly结构-
- 可以使用 readonly 修饰符来声明结构类型为不可变
- readonly 结构的所有数据成员都必须是只读的
- 这样可以保证 readonly 结构的成员不会修改该结构的状态。这意味着除构造函数外的其他实例成员是隐式 readonly
- 注:在 readonly 结构中,可变引用类型的数据成员仍可改变其自身的状态,如List,仍然可以入list 中添加内容。
- 定义方式,以系统提供的 Int32 类型为例:
public readonly struct Int32 : IComparable, IComparable<int>, IConvertible, IEquatable<int>, ISpanFormattable, IFormattable
{
private readonly int _dummyPrimitive;
...
}
注:通常,可以使用结构类型来设计以数据为中心的较小类型,这些类型只有很少的行为或没有行为。例如,.NET 使用结构类型来表示数字(整数和实数)、布尔值、Unicode 字符以及时间实例。如果侧重于类型的行为,请考虑定义一个类。
枚举(enum)
枚举类型(enum)
- 是由基础整型数值类型的一组命名常量定义的值类型
- 使用 enum 关键字定义并指定枚举成员
enum ColorEnum
{
Red,
Blue,
Green,
Yellow
}
- 默认情况下,枚举成员的关联常数值为类型 int;它们从零开始,并按定义文本顺序递增 1。可以显式指定任何其他整数数值类型作为枚举类型的基础类型。还可以显式指定关联的常数值
enum ColorEnum
{
Red =1,
Blue =2,
Green = 3,
Yellow =4
}
- 枚举的使用
// 赋值
ColorEnum colorEnum = ColorEnum.Green;
//比较
if(colorEnum == ColorEnum.Red)
{
Console.WriteLine("符合逻辑....");
}
// 也可以用 swicth 语句
switch (colorEnum)
{
case ColorEnum.Green:
Console.WriteLine("green");
break;
case ColorEnum.Red:
Console.WriteLine("red");
break;
case ColorEnum.Yellow:
Console.WriteLine("yellow");
break;
default: Console.WriteLine();
}
枚举的转换
- 对于任何枚举类型,枚举类型与其基础整型类型之间存在显式转换
var b = (ColorEnum)1;
Console.WriteLine(b); // output: red
var c = (ColorEnum)4;
Console.WriteLine(c); // output: yellow
// 如果枚举中没有,则输出原值
var d = (ColorEnum)5;
Console.WriteLine(d); // output: 5
- 与字符串的转换
ColorEnum colorEnum = ColorEnum.Green;
Console.WriteLine(colorEnum.ToString()); // output: Green
// 将 Red字符串 转换成枚举
var ee= Enum.Parse(typeof(ColorEnum), "Red");
Console.WriteLine(ee); // output: red
Console.WriteLing("微信公众号同名")
相关文章
- [C#] 常用工具类——系统日志类
- Elasticsearch C# NEST IndexMany Children
- 重新整理数据结构与算法(c#)—— 算法套路动态规划算法[二十六]
- C# 如何识别一个字符串是否Json格式
- C# FileStream.Read Method
- 为C#自定义控件添加自定义事件
- 【转载】C#堆和栈的区别
- atitit.js 与c# java交互html5化的原理与总结.doc
- C#中Queue<T>类的使用以及部分方法的源代码分析
- [0] C# & MongoDB
- [1] C# IS & AS讲解
- C# char / 替换
- C# 源代码生成器
- C#经典算法面试题
- [C#]c#中数据的同步加锁机制 的几种方法