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

      

  • 相关阅读:
    Linux下 Nginx 启动 重启 关闭
    在Idea中 的terminal 使用 git
    前端页面出现乱码
    Mac下Eclipse(Oxygen)添加Tomcat插件
    Linux下vsftp匿名用户配置
    500 OOPS: vsftpd: refusing to run with writable anonymous root
    FTP数字代码的意义
    CentOS 6.3下安装Vsftp,虚拟用户
    CentOS 6.3 下 vsftp搭建
    CentOS 6.3安装配置LAMP服务器(Linux+Apache+MySQL+PHP5)
  • 原文地址:https://www.cnblogs.com/soulsjie/p/14953570.html
Copyright © 2020-2023  润新知