1. 定义结构
要定义结构,必须使用 struct 关键字。每个结构都可以被认为是一种新的数据类型,可以包含多个成员(成员属性和成员方法),例如下面声明的 Books 结构。
struct Books {
public string title;
public string author;
public string subject;
public int book_id;
};
设计结构时应注意以下几点:
- 您不能为结构声明无参数构造函数,因为每个结构都有一个默认创建的隐式无参数构造函数。
- 除了静态属性和常量之外,成员属性不能在声明时初始化。
- 结构构造函数必须初始化结构的所有成员属性。
- 结构体不能从其他类或结构体继承,也不能用作类的基类型,但结构体类型可以实现接口。
- 析构函数不能在结构内部声明。
下面的例子展示了如何使用这个结构。
using System;
namespace it-kiso.com
{
struct Books {
public string title;
public string author;
public string subject;
public int book_id;
}
class Demo
{
static void Main(string[] args)
{
Books book1; // Books型のbook1を宣言
Books book2; // Books型のbook2を宣言
// book1の属性を定義する
book1.title = "C#チュートリアル";
book1.author = "IT基礎";
book1.subject = "C#プログラミングチュートリアル";
book1.book_id = 123456;
// book2の属性を定義する
book2.title = "HTTPチュートリアル";
book2.author = "IT基礎";
book2.subject = "HTTPプロトコルチュートリアル";
book2.book_id = 123455;
// book1の属性情報を出力する
Console.WriteLine("book1 title : {0}", book1.title);
Console.WriteLine("book1 author : {0}", book1.author);
Console.WriteLine("book1 subject : {0}", book1.subject);
Console.WriteLine("book1 book_id :{0}", book1.book_id);
// book2の属性情報を出力する
Console.WriteLine("book2 title : {0}", book2.title);
Console.WriteLine("book2 author : {0}", book2.author);
Console.WriteLine("book2 subject : {0}", book2.subject);
Console.WriteLine("book2 book_id :{0}", book2.book_id);
Console.ReadKey();
}
}
} 操作的结果将是:
book1 title : C#チュートリアル
book1 author : IT基礎
book1 subject : C#プログラミングチュートリアル
book1 book_id :123456
book2 title : HTTPチュートリアル
book2 author : IT基礎
book2 subject : HTTPプロトコルチュートリアル
book2 book_id :123455
2、结构特点
C#的结构与C/C++的结构有很大不同,C#的结构有以下特点:
- 结构可以包含方法、字段、索引、属性、运算符方法和事件。
- 可以在结构上定义构造函数,但不能在结构上定义析构函数。请注意,定义的构造函数不能有参数,因为无参数构造函数是 C# 默认自动定义的,并且无法修改。
- 与类不同,结构不能从其他结构或类继承。
- 结构不能用作其他结构或类的基础结构。
- 一个结构体可以实现一个或多个接口。
- 结构成员不能设置为抽象、虚拟或受保护。
- 与类不同,结构体可以在不使用 New 运算符的情况下进行实例化。当您使用 New 运算符实例化结构体时,会自动调用该结构体的构造函数。
- 当您在不使用 New 运算符的情况下实例化结构体时,结构体对象中的字段保持未分配状态,并且在初始化所有字段之前,结构体实例不可用。

类和结构之间的主要区别是:
- 类是引用类型,结构是值类型。
- 结构体不支持继承,但可以实现接口。
- 不能在结构内部声明默认构造函数。
让我们根据上述属性来完成前面的示例。
using System;
namespace it-kiso.com
{
struct Books {
public string title;
public string author;
public string subject;
public int book_id;
public void getValue(string t, string a, string s, int id){
title = t;
author = a;
subject = s;
book_id = id;
}
public void disPlay(){
Console.WriteLine("タイトル:{0}", title);
Console.WriteLine("著者:{0}", author);
Console.WriteLine("主題:{0}", subject);
Console.WriteLine("書籍ID:{0}", book_id);
}
}
class Demo
{
static void Main(string[] args)
{
Books book1 = new Books(); // Books構造体のインスタンス化
Books book2 = new Books(); // Books構造体のインスタンス化
// book1の属性を定義
book1.getValue("C#チュートリアル","IT基礎","C#プログラミングチュートリアル",123456);
// book2の属性を定義
book2.getValue("HTTPチュートリアル","IT基礎","HTTPプロトコルチュートリアル",123455);
// book1の属性情報を出力
book1.disPlay();
// book2の属性情報を出力
book2.disPlay();
Console.ReadKey();
}
}
}




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

