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);
}
}
}