s
o
u
l
s
j
i
e

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

  

posted @ 2021-06-30 11:09  soulsjie  阅读(158)  评论(0编辑  收藏  举报
你累吗?累就对了,当你觉得累时证明你在走上坡路!-----NotFoundObject - 2016-12-14 08:43