Bootstrap

【Unity 15】 C# 结构体Struct的定义及使用

PS:本系列笔记将会记录我此次在北京学习Unity开发的总体过程,方便后期写总结,笔记为日更。
笔记内容均为 自己理解,不保证每个都对。
C#笔记未按照难度排列

Part 1 结构体的定义:

在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。结构体是用来代表一个记录。假设您想跟踪图书馆中书的动态。

定义结构体:必须用到Struct属性

基本格式为:

    struct 结构体名
    {
    	结构体属性
    	结构体方法(选填)
     }

例如定义一本书的结构体:

    struct Book
    {
        public string bookName;     //书名
        public string bookAuthor;   //作者
        public string bookSubject;  //科目
        public string bookID;       //编号

	    public void Print()
        {
            Console.WriteLine("bookID = {0}    bookName = {1}   bookAuthor = {2}   bookSubject = {3}", bookID, bookName, bookAuthor, bookSubject);
        }
     }

结构体的使用:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FREE_TEST2_2019_08_08
{
    struct Book
    {
        public string bookName;     //书名
        public string bookAuthor;   //作者
        public string bookSubject;  //科目
        public string bookID;       //编号

        public void Print()
        {
            Console.WriteLine("bookID = {0}    bookName = {1}   bookAuthor = {2}   bookSubject = {3}", bookID, bookName, bookAuthor, bookSubject);
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            Book bookA;
            Book bookB;

            bookA.bookName = "The Magic Stone";
            bookA.bookAuthor = "JR";
            bookA.bookSubject = "Magic";
            bookA.bookID = "ISBC201908081510";

            bookB.bookName = "The Deathly Hallows";
            bookB.bookAuthor = "JR";
            bookB.bookSubject = "Magic";
            bookB.bookID = "ISBC201908081511";


            bookA.Print();
            bookB.Print();




            Console.ReadLine();
        }
    }
}

输出结果为在这里插入图片描述

Part 2结构体与类

在这里插入图片描述

若把刚刚书的结构体用 类表示 则代码为:

    class BookClass
    {
        public string bookName;     //书名
        public string bookAuthor;   //作者
        public string bookSubject;  //科目
        public string bookID;       //编号

        public BookClass()
        {

        }

        public BookClass(string bookName, string bookAuthor, string bookSubject, string bookID)
        {
            this.bookName = bookName;
            this.bookAuthor = bookAuthor;
            this.bookSubject = bookSubject;
            this.bookID = bookID;
        }

        public void Print()
        {
            Console.WriteLine("bookID = {0}    bookName = {1}   bookAuthor = {2}   bookSubject = {3}", bookID, bookName, bookAuthor, bookSubject);
        }
    }

区别:
结构体是值类型,类是引用类型
例如:

            BookClass bookOne = new BookClass("The Magic Stone", "JR", "Magic", "ISBC201908081510");
            BookClass bookTwo = new BookClass("The Deathly Hallows", "JR", "Magic", "ISBC201908081511");



            bookOne.Print();
            bookTwo.Print();


            Console.WriteLine("=============================================================");
            bookA = bookB;
            bookB.bookName = "The Order of the Phoenix";
            bookA.Print();

            Console.WriteLine();

            bookOne = bookTwo;
            bookTwo.bookName = "The Order of the Phoenix";
            bookOne.Print();

            Console.WriteLine("=============================================================");

测试结果为:
在这里插入图片描述
很明显发现
对结构体而言, 当赋值后 bookB发生改变时,bookA的属性不变
对类而言 ,当赋值后bookTwo发生改变时,booKOne的属性随着改变

;