C#结构体

在 C# 中,结构体是一种值类型数据类型。它可以帮助您使单个变量保存各种数据类型的相关数据在一起。struct关键字用于定义和创建一个结构。

结构体用于表示记录信息。假设您想在图书馆中跟踪记录书籍信息。假设希望跟踪每本书的以下属性:

  • 标题
  • 作者
  • 学科
  • 图书编号

定义结构

要定义一个结构,需要使用struct语句。struct语句定义了一个新的数据类型,有多个程序的成员。

例如,以下是声明Book结构体的方式:

struct Books
{
   public string title;
   public string author;
   public string subject;
   public int book_id;
};

以下示例程序显示如何使用结构体:

using System;
struct Books
{
    public string title;
    public string author;
    public string subject;
    public int book_id;
};

public class testStructure
{
    public static void Main(string[] args)
    {

        Books Book1;   /* Declare Book1 of type Book */
        Books Book2;   /* Declare Book2 of type Book */

        /* book 1 specification */
        Book1.title = "C Programming";
        Book1.author = "Maxsu";
        Book1.subject = "C Programming Tutorial";
        Book1.book_id = 5493427;

        /* book 2 specification */
        Book2.title = "Telecom Billing";
        Book2.author = "Sukida";
        Book2.subject = "Telecom Billing Tutorial";
        Book2.book_id = 8493480;

        /* print Book1 info */
        Console.WriteLine("Book 1 title : {0}", Book1.title);
        Console.WriteLine("Book 1 author : {0}", Book1.author);
        Console.WriteLine("Book 1 subject : {0}", Book1.subject);
        Console.WriteLine("Book 1 book_id :{0}", Book1.book_id);

        /* print Book2 info */
        Console.WriteLine("Book 2 title : {0}", Book2.title);
        Console.WriteLine("Book 2 author : {0}", Book2.author);
        Console.WriteLine("Book 2 subject : {0}", Book2.subject);
        Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);

        Console.ReadKey();

    }
}

当编译和执行上述代码时,会产生以下结果:

Book 1 title : C Programming
Book 1 author : Maxsu
Book 1 subject : C Programming Tutorial
Book 1 book_id :5493427
Book 2 title : Telecom Billing
Book 2 author : Sukida
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 8493480

C# 结构体的特点

在上面地示例中,我们已经使用了一个名为Books的简单结构体。 C# 中的结构与传统的C语言或C++中的结构完全不同。 C# 结构具有以下特点:

  • 结构体可以有方法,字段,索引器,属性,操作符方法和事件。
  • 结构体可以有定义的构造函数,但不能是析构函数。但是不能为结构定义默认构造函数。默认构造函数是自动定义的,不能被更改。
  • 与类不同,结构体不能继承其他结构体或类。
  • 结构体不能用作其他结构或类的基础。
  • 结构体可以实现一个或多个接口。
  • 结构成员不能被指定为抽象,虚拟或受保护。
  • 当使用New运算符创建一个struct对象时,它将调用相应的构造函数。 与类不同,可以在不使用New运算符的情况下实例化结构体。
  • 如果不使用New运算符,则字段保持未分配,并且在所有字段初始化之前不能使用对象。

类与结构区别

类和结构有以下基本差别:

  • 类是引用类型,结构体是值类型
  • 结构体不支持继承
  • 结构体不能有默认构造函数

根据上述讨论,下面我们来重写上一个例子:

using System;
struct Books
{
    private string title;
    private string author;
    private string subject;
    private int book_id;
    public void getValues(string t, string a, string s, int id)
    {
        title = t;
        author = a;
        subject = s;
        book_id = id;
    }
    public void display()
    {
        Console.WriteLine("Title : {0}", title);
        Console.WriteLine("Author : {0}", author);
        Console.WriteLine("Subject : {0}", subject);
        Console.WriteLine("Book_id :{0}", book_id);
    }

};

public class testStructure
{
    public static void Main(string[] args)
    {

        Books Book1 = new Books();   /* Declare Book1 of type Book */
        Books Book2 = new Books();   /* Declare Book2 of type Book */

        /* book 1 specification */
        Book1.getValues("C Programming",
        "Maxsu", "C Programming Tutorial", 749540712);

        /* book 2 specification */
        Book2.getValues("Telecom Billing",
        "Sukida", "Telecom Billing Tutorial", 59570011);

        /* print Book1 info */
        Book1.display();

        /* print Book2 info */
        Book2.display();

        Console.ReadKey();

    }
}

当编译和执行上述代码时,会产生以下结果:

Title : C Programming
Author : Maxsu
Subject : C Programming Tutorial
Book_id :749540712
Title : Telecom Billing
Author : Sukida
Subject : Telecom Billing Tutorial
Book_id :59570011

上一篇: C#字符串 下一篇: C#枚举