C# 结构,结构是值类型。 该类型由struct
关键字定义。 结构与类非常相似。 它们在某些方面有所不同。 结构旨在表示轻量级对象,例如Point
,Rectangle
,Color
等。 在许多情况下,结构可能比类更有效。 结构是值类型,并在堆栈上创建。 注意,像int
,bool
,float
之类的原始数据类型在技术上都是struct
类型。
所有struct
类型都继承自System.ValueType
,并且继承自System.Object
。 结构从来都不是抽象的,它们总是被隐式密封的。 因此结构类型不支持继承。 因此,不能将struct
数据成员声明为受保护的。 struct
定义不允许使用抽象修饰符和密封修饰符。 不允许struct
声明无参数的构造函数。
结构还可以包含构造函数,常量,字段,方法,属性,索引器,运算符,事件和嵌套类型。 但是,如果我们需要实现更多这些功能,则可以考虑使用一个类。 结构可以实现接口。 struct
可以用作nullable
类型,并且可以分配为空值。
简单结构示例
以下示例创建一个简单的结构。
Program.cs
该示例创建一个Point
结构。 这个点也可以用一个类来表示,但是有了struct
,我们的效率更高了。 特别是如果我们处理了很多问题。
该结构用struct
关键字声明。
struct
类型不支持继承。 但是,我们可以对方法使用override
关键字,struct
类型隐式地从中继承。 ToString()
方法就是这种情况。
我们创建Point
结构,并在其上调用ToString()
方法。
这是示例的输出。
没有new
关键字
可以创建不带new
关键字的struct
类型的实例。
Program.cs
我们有一个Person
结构,其中有两个公共成员。
首先,我们声明一个Person
结构。
稍后我们用一些数据初始化结构。
这是程序的输出。
C# 结构是值类型
结构类型是值类型。 它们是在堆栈上创建的。 创建值类型时,仅在内存中分配了一个空间来存储值。 值类型的分配将复制该值。
Program.cs
我们有一个带有两个数据成员的Person
结构。 我们有两个参数的构造函数,我们也使用自动属性。
可以在struct
类型中使用自动属性。
在这里,我们创建一个struct
。 然后将创建的struct
分配给另一个struct
。 我们创建该结构的副本。
我们更改第二个结构的数据。 第一个不受影响,因为我们正在处理原始struct
类型的副本。
基本类型是结构
像int
,float
或bool
之类的原始数据类型是内部结构。 这不同于 C++ 或 Java 之类的语言。
Program.cs
我们有三个变量:float,int
和bool
。 我们对它们每个调用GetType()
方法。
我们在浮点值上调用GetType()
方法。 每个结构都隐式继承自包含GetType()
方法的System.ValueType
类。
这是示例的输出。 我们可以在文档中查找这些类型是结构。