C#结构体与类的使用和区别
using System; /// <summary> /// 结构体与类 /// </summary> namespace StructAndClass { class Program { //结构的特点 //1.结构可带有方法、字段、索引、属性、运算符方法和事件。 //2.结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义无参构造函数。无参构造函数(默认)是自动定义的,且不能被改变。 //3.与类不同,结构不能继承其他的结构或类。 //4.结构不能作为其他结构或类的基础结构。 //5.结构可实现一个或多个接口。 //6.结构成员不能指定为 abstract、virtual 或 protected。 //7.当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。 //8.如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。 //类 vs 结构 区别 //1.结构是值类型,它在栈中分配空间;而类是引用类型,它在堆中分配空间,栈中保存的只是引用。 //2.结构不支持继承。 //3.结构不能声明默认的构造函数。 //4.结构有参构造函数中必须对所有属性赋值、类无此限制。 /// <summary> /// 定义结构体 /// </summary> struct Book { //属性 public string book_name; public string book_id; public string book_author; //方法 public void Print() { Console.WriteLine("book_name is {0},book_id is {1},book_author is {2}", book_name, book_id, book_author); } //有参构造函数--注意在有参构造函数内,必须要对结构体所有属性赋值 public Book(string bookname, string bookid, string bookauthor) { book_name = bookname; book_id = bookid; book_author = bookauthor; } } static void Main(string[] args) { //申明新结构体 Book book1; //赋值 book1.book_name = "《书籍1》"; book1.book_id = "10001"; book1.book_author = "张清华"; book1.Print(); //调用有参构造函数,申明新结构体 Book book2 = new Book("《书籍2》", "10002", "王杰"); book2.Print(); //申明类 BookClass book3 = new BookClass() { book_name = "《书籍3》", book_id = "10003", book_author = "李飞" }; book3.PrintClass(); //申明类 BookClass book4 = new BookClass(); book4.setValues("《书籍4》", "10004", "老六"); book4.PrintClass(); Console.ReadKey(); } } /// <summary> /// Book类 /// </summary> public class BookClass { public string book_name { get; set; } public string book_id { get; set; } public string book_author { get; set; } public void setValues(string bookname, string bookid, string bookauthor) { book_name = bookname; book_id = bookid; book_author = bookauthor; } public void PrintClass() { Console.WriteLine("book_name is {0},book_id is {1},book_author is {2}", book_name, book_id, book_author); } } }