C# 结构体

C# 结构体(Struct)

在 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;
};
Books bookA;
            bookA.title = "The Hitchhiker‘s Guide to the Galaxy";
            bookA.author = "DouglasAdams";
            bookA.subject = "Since";
            bookA.book_id = 424242;
            Books bookB;
            bookB.author = "undefined";
            //Console.WriteLine($"《{bookB.title}》 are {bookB.subject} subject written by{bookB.author}");
            //结构体不使用New的话无法直接调用属性 , 属性值赋值完才可以调用,有默认空构造函数
            Console.WriteLine($"《{bookA.title}》 are {bookA.subject} subject written by{bookA.author}");
《The Hitchhikers Guide to the Galaxy》 are Since subject written byDouglasAdams

C# 结构的特点

您已经用了一个简单的名为 Books 的结构。在 C# 中的结构与传统的 C 或 C++ 中的结构不同。C# 中的结构有以下特点:

  • 结构可带有方法、字段、索引、属性、运算符方法和事件。
  • 结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义无参构造函数。无参构造函数(默认)是自动定义的,且不能被改变。
  • 与类不同,结构不能继承其他的结构或类。
  • 结构不能作为其他结构或类的基础结构。
  • 结构可实现一个或多个接口。
  • 结构成员不能指定为 abstract、virtual 或 protected。
  • 当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
  • 如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。

类 vs 结构

类和结构有以下几个基本的不同点:

  • 类是引用类型,结构是值类型。
  • 结构不支持继承。
  • 结构不能声明默认的构造函数。
  • 结构体中声明的字段无法赋予初值,类可以
  • 类的对象是存储在堆空间中,结构存储在栈中。堆空间大,但访问速度较慢,栈空间小,访问速度相对更快

针对上述讨论,让我们重写前面的实例:

 Books bookC = new Books();
            bookC.initValue("Dawn Blossoms Plucked at Dusk", "LuXun", "Collection of essays");
            bookC.showDetail();

struct Books
        {
            public string title;
            public string author;
            public string subject;
            public int book_id;
            public void initValue(params string[] val)
            {
                title = val[0];
                author = val[1];
                subject = val[2];
                book_id = (int)DateTime.Now.Ticks;
            }
            public void showDetail()
            {
                Console.WriteLine($"《{title}》 are {subject} subject written by {author}");
            }
        };

 

《Dawn Blossoms Plucked at Dusk》 are Collection of essays subject written by LuXun

 

C# 结构体

上一篇:机器学习实战-K-nearest neighbors 算法的优缺点


下一篇:实践一:创建win2012虚拟机并在本机通过远程桌面访问