网站制作公司官网首页,网站被黑的表现,wordpress验证邮箱验证码,傻瓜网站开发工具目录
C# 结构体#xff08;Struct#xff09;
定义结构体
C# 结构的特点
类 vs 结构
C# 枚举#xff08;Enum#xff09;
声明 enum 变量
实例 C# 结构体#xff08;Struct#xff09;
定义结构体
在 C# 中#xff0c;定义结构体使用关键字 struct。下面是一个…目录
C# 结构体Struct
定义结构体
C# 结构的特点
类 vs 结构
C# 枚举Enum
声明 enum 变量
实例 C# 结构体Struct
定义结构体
在 C# 中定义结构体使用关键字 struct。下面是一个简单的例子
public struct Point
{public int X;public int Y;public Point(int x, int y){X x;Y y;}
}在这个例子中我们定义了一个名为 Point 的结构体它有两个公共的整型成员变量 X 和 Y。此外我们还定义了一个带有两个参数的构造函数来初始化 X 和 Y 的值。
在 C# 中结构体是一种值类型与类不同它们是按值进行分配和传递的而不是按引用。结构体通常用于表示轻量级的数据结构比如坐标、颜色、矩形等简单的数据类型。
使用结构体可以避免创建对象实例时引发的开销并且在某些情况下有助于提高性能。在 C# 中结构体经常用于创建小型不可变的数据结构以及在需要高性能的场景中使用。
C# 结构的特点
C# 中的结构Struct与传统的 C 或 C 中的结构有一些显著的不同下面是结构在 C# 中的特点
包含方法、字段等成员 结构体可以包含方法、字段、索引器、属性、运算符方法和事件等成员使得结构体可以拥有丰富的功能和行为。可定义构造函数 结构体可以定义构造函数来初始化实例但不能定义析构函数。此外不能为结构体定义无参构造函数因为默认的无参构造函数是自动定义的且不可改变的。不支持继承 与类不同结构体不能继承其他结构或类也不能作为其他结构或类的基础结构。可实现接口 结构体可以实现一个或多个接口从而获得接口的所有特性和行为。成员限制 结构体的成员不能指定为 abstract、virtual 或 protected。实例化 当使用 new 操作符创建一个结构对象时会调用适当的构造函数来创建结构。与类不同结构可以不使用 new 操作符即可被实例化。如果不使用 new 操作符只有在所有的字段都被初始化之后字段才被赋值对象才能被使用。
总的来说C# 中的结构体具有更丰富的功能和行为允许包含方法、实现接口等特性同时也有一些与类不同的限制和特点。
类 vs 结构
类和结构的主要区别包括 类是引用类型而结构是值类型。这意味着当你操作类对象时你实际上操作的是引用而当你操作结构对象时你操作的是对象的实际值。 类支持继承和多态而结构不支持继承。 结构不能声明默认的无参构造函数。这意味着如果你想在创建结构实例时使用无参构造函数你必须显式地定义一个。
这些区别决定了在不同的情况下应该选择类还是结构。
在选择类class和结构struct时需要根据具体的需求来进行权衡。
当需要表示一个轻量级的数据结构时结构是一个不错的选择因为它们可以在栈上分配内存访问速度较快而且相对较小的结构也更容易复制。通常情况下结构适合用于描述简单的数据类型比如坐标、颜色等。另一方面类通常用于表示更复杂的对象这些对象可能有更多的行为和状态而且通常会被分配到堆上。使用类可以方便地进行引用传递这意味着对象的引用地址可以被传递而不是对象的拷贝。这对于需要共享数据或者需要对同一份数据进行修改的情况非常有用。
因此在选择类还是结构时需要考虑到数据的复杂性、大小、生命周期以及是否需要进行引用传递等因素。
代码示例
using System;public class Person
{public string Name { get; set; } // 姓名属性public int Age { get; set; } // 年龄属性public void SayHello(){Console.WriteLine(你好我的名字是 Name 而我今年 Age 岁了。); // 打印问候语}
}public struct Point
{public int X { get; set; } // X 坐标属性public int Y { get; set; } // Y 坐标属性public Point(int x, int y){X x;Y y;}
}class Program
{static void Main(){// 使用类的实例Person person new Person();person.Name John; // 设置姓名person.Age 25; // 设置年龄person.SayHello(); // 调用方法进行打招呼// 使用结构的实例Point point new Point(10, 20); // 创建点对象传入坐标值Console.WriteLine(X 坐标: point.X); // 打印X坐标值Console.WriteLine(Y 坐标: point.Y); // 打印Y坐标值}
}C# 枚举Enum
枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。C# 枚举是值类型。换句话说枚举包含自己的值且不能继承或传递继承。
声明 enum 变量
声明枚举的一般语法
enum enum_name
{ enumeration list
};其中
enum_name 指定枚举的类型名称。enumeration list 是一个用逗号分隔的标识符列表。
枚举列表中的每个符号代表一个整数值一个比它前面的符号大的整数值。默认情况下第一个枚举符号的值是 0.例如
enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };注意
枚举类型是一种用于定义常量集合的数据类型适用于那些取值范围有限的数据。枚举类型能够帮助我们固定取值范围并且易于阅读和使用。
在 C# 中枚举的默认访问权限修饰符是 internal枚举名遵循大驼峰命名法而且枚举的每个值都是整型默认从 0 开始。此外枚举中元素的值可以设置为相同但并不推荐这样做因为这可能会导致代码可读性下降增加混淆。
默认情况下C#中的枚举元素的基础类型是int型。但可以通过指定其他整型类型来修改枚举的基础类型。合法的整型基础类型包括 byte、sbyte、short、ushort、int、uint、long 和 ulong。例如可以使用以下语法将枚举的基础类型设置为byte
enum MyEnum : byte
{Value1,Value2,Value3
}在此示例中MyEnum 枚举的基础类型被显式设置为 byte。
实例
using System;
using System.ComponentModel;public enum Season
{[Description(春天)]Spring,[Description(夏天)]Summer,[Description(秋天)]Autumn,[Description(冬天)]Winter
}class Program
{static void Main(){Season currentSeason Season.Winter;string seasonName GetEnumDescription(currentSeason);Console.WriteLine(当前季节是 seasonName);}// 获取枚举成员的描述值static string GetEnumDescription(Enum value){var fieldInfo value.GetType().GetField(value.ToString());var attributes (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);return attributes.Length 0 ? attributes[0].Description : value.ToString();}
}在这个示例中我们使用 Description 特性为枚举成员定义了中文名称并编写了一个辅助方法 GetEnumDescription 来获取枚举成员的描述值。当我们需要显示枚举成员对应的中文季节名称时我们可以通过该方法来实现。