注册 登录

清河洛

C#中的结构体

qingheluo2021-09-01清河洛834
在C#中,结构体是值类型数据结构,它使得一个单一变量可以存储各种数据类型的相关数据。C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员。struct关键字用于创建结构体struct Mystruct{ //结构体定义 } 结构的特点结构可带有方法、字段、索引、属性、运算符方法和事件 结构体中声明的字段无法赋予初值 结构可定义构造函数,但不能定义析构函数 不能为结构定义无参构造函数,无参构造函数(默认)是自动定义的,且不能被改变 结构体的构造函数中,必须为结构体所有字段赋值 与类不同,结构不能继承其他的结构或类 结构不能作为其他结构或类的基础...

在C#中,结构体是值类型数据结构,它使得一个单一变量可以存储各种数据类型的相关数据。

C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员。

struct关键字用于创建结构体

struct Mystruct{
    //结构体定义
}

结构的特点

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

类与结构的选择

首先明确,类的对象是存储在堆空间中,结构存储在栈中。堆空间大,但访问速度较慢,栈空间小,访问速度相对更快。故而,当我们描述一个轻量级对象的时候,结构可提高效率,成本更低。当然,这也得从需求出发,假如我们在传值的时候希望传递的是对象的引用地址而不是对象的拷贝,就应该使用类了。

using System;
using System.Text;

struct Books{
   public string title;
   public string author;
   public string subject;
   public int book_id;
   public void setValues(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 MyClass{
    public static void Main(){
        Books book1 = new Books(); /* 声明Book1,类型为 Books,使用new关键字 */
        Books book2; /* 声明 Book2,类型为 Books,不使用new关键字*/

        book1.setValues("第一本书","作者1", "第一本书简介",1234);
        book1.display();

        //由于book2未使用new关键字,在有成员未被赋值之前,book2对象不能使用,也就是说不能使用setValues方法
        //需要逐一对成员进行赋值,然后才能使用方法
        book2.title="第二本书";
        book2.author="作者2";
        book2.subject="第二本书简介";
        book2.book_id=5678;
        book2.display();

        Console.ReadKey();
    }
}


网址导航