C#教程12结构
一、C# 结构
在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。
结构体是用来代表一个记录。假设您想跟踪图书馆中书的动态。您可能想跟踪每本书的以下属性:
- Title
- Author
- Subject
- Book ID
以下介绍对于书这种含多个属性的数据如何定义。
二、定义结构体
为了定义一个结构体,您必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型。例如,您可以按照如下的方式声明 Book 结构:
-
struct Books
-
{
-
public string title;
-
public string author;
-
public string subject;
-
public int book_id;
-
};
结构是一种值类型。类型使用 struct 关键字定义。结构与类非常相似;它们在某些方面有所不同。结构旨在表示轻量级对象,如点、矩形、颜色等。在许多情况下,结构可能比类更有效。结构是值类型并在堆栈上创建。请注意,int、bool、float 等原始数据类型在技术上属于结构类型。
结构还可以包含构造函数、常量、字段、方法、属性、索引器、运算符、事件和嵌套类型。但是,如果我们需要实现更多这些功能,我们可能会考虑使用一个类来代替。
结构可以实现接口。结构可以用作可空类型,并且可以分配空值。
三、简单的结构案例
下面的示例创建一个简单的结构。
Program.cs
-
var p = new Point(2, 5);
-
Console.WriteLine(p);
-
-
public struct Point
-
{
-
private int x;
-
private int y;
-
-
public Point(int x, int y)
-
{
-
this.x = x;
-
this.y = y;
-
}
-
-
public override string ToString()
-
{
-
return $"Point x:{x}, y:{y}";
-
}
-
}
该示例创建一个点结构。这个点也可以用一个类来表示,但是使用 struct 我们效率更高;特别是,如果我们处理了很多点。
-
var p = new Point(2, 5);
-
Console.WriteLine(p);
我们创建点结构并调用其 ToString 方法。
public struct Point
{
...
}
该结构使用 struct 关键字声明。
public override string ToString()
{
return $"Point x:{x}, y:{y}";
}
结构类型不支持继承。但是我们可以为方法使用 override 关键字,结构类型从这些方法中隐式继承。 ToString 方法就是这样一种情况。
$ dotnet run
Point x:2, y:5
四、定义时可以不用 new 关键词
可以在没有新关键字的情况下创建结构类型的实例。
Program.cs
Person p;
p.name = "Jane";
p.age = 17;
Console.WriteLine($"{p.name} is {p.age} years old");
public struct Person
{
public string name;
public int age;
}
我们有一个包含两个公共成员的人员结构。
Person p;
首先,我们声明一个 Person 结构。
p.name = "Jane";
p.age = 17;
稍后我们用一些数据初始化结构。
$ dotnet run
Jane is 17 years old
五、结构是值类型
结构类型是值类型。它们是在堆栈上创建的。创建值类型时,仅分配内存中的一个空间来存储该值。值类型的赋值复制值。
Program.cs
var p1 = new Person("Beky", 18);
var p2 = p1;
Console.WriteLine(p2);
p2.Name = "Jane";
p2.Age = 17;
Console.WriteLine(p2);
Console.WriteLine(p1);
public struct Person
{
public Person(string name, int age) : this()
{
this.Name = name;
this.Age = age;
}
public string Name { get; set; }
public int Age { get; set; }
public override string ToString()
{
return $"{Name} is {Age} years old";
}
}
我们有一个包含两个数据成员的 Person 结构。我们有一个两个参数的构造函数,我们还使用自动属性。
var p1 = new Person("Beky", 18);
var p2 = p1;
在这里,我们创建了一个结构。然后将创建的结构分配给另一个结构。我们创建一个结构的副本。
p2.Name = "Jane";
p2.Age = 17;
我们更改第二个结构的数据。第一个不受影响,因为我们处理的是原始结构类型的副本。
public string Name { get; set; }
public int Age { get; set; }
自动属性可用于结构类型。
$ dotnet run
Beky is 18 years old
Jane is 17 years old
Beky is 18 years old
六、原始数据是结构
int、float 或 bool 等原始数据类型是底层结构。这与 C 或 Java 等语言不同。
Program.cs
float x = 12.3f;
int y = 34;
bool z = false;
Console.WriteLine(x.GetType());
Console.WriteLine(y.GetType());
Console.WriteLine(z.GetType());
我们有三个变量:float、int 和 bool。我们对它们中的每一个调用 GetType 方法。
Console.WriteLine(x.GetType());
我们在浮点值上调用 GetType 方法。每个结构都隐式继承自包含 GetType 方法的 System.ValueType 类。
$ dotnet run
System.Single
System.Int32
System.Boolean
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfkcji
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01