Unity C# | 讀(get)和寫(set)概述 & 基本運用

閱讀時間約 5 分鐘

前言

  這篇文章主要介紹存取子讀(get)和寫(set)的概述,並且簡單介紹基本的使用方法,所以不會使用過多的程式和範例來做說明,希望以易懂白話的方式傳達這個很常看到但不易理解的概念。
  前篇文章提到擔心文章撰寫之前學的知識會和新學的知識衝突,進而學新知識和撰寫就舊學知識文章導致工作量大增,時間證明我想多了,人總有雜物跟其他事情,翻著筆記本,我在尋找值得撰寫的文章。

屬性:讀(get)、寫(set)

  讀跟寫不好懂,我想一部分原因來自於新手不常用,它不像其他程式跟修飾詞屬於「總會用到」的類型,而是屬於「也可以這麼用」的類型,不過理解後也還好。

屬性(Properties)

  首先要介紹屬性,在微軟C#官方定義為:
「屬性會合併欄位和方法的各個層面。 對物件的使用者而言,屬性會呈現為欄位,而存取屬性需要相同的語法。 對於類別的實作器而言,屬性是一或兩個程式碼區塊,代表 get 存取子和 (或) set 存取子。
  因為在這一段敘述中,你需要理解欄位(fields)、方法(method)、類別(class)、實作器(implementer)、程式碼區塊(code blocks)、存取子(accessor)

當屬性來到現實世界

  如果要求學習每程式都需要理解每一個單字的內容,那學習程式會變得相當痛苦,但有些人就是想要從定義下手,譬如我,學這些基本屬性讓我作了不少筆記,也花了不少時間,我現在用我的理解解釋給你看。
  所謂屬性(properties),就是一種「限制器」、「中繼站」,就像「保險絲」一樣的作用,假設有有一個人類被創造了,而耶穌跟佛祖都想設定你的基本參數,像體重、智商等等,耶穌在設定智商時,多了一個零變成1100IQ,而屬性(properties)這個「保險絲」,就會幫你轉變成200IQ(人類理論最大值)或是乾脆斷電(連值都沒有)。
  在智商的變數上面,分為「耶穌設定的智商」和「你的智商」兩個不同的數字,於是「保險絲」就運作了,寫(set)負責更改「耶穌設定的智商」然後存進「保險絲儲存的智商」、寫(set)負責把「保險絲儲存的智商」轉移給「你的智商」

程式中的屬性

  為了確保所有人聽懂,保險絲是確保電線不會燒起來,本身也是電線的一種,只是比較容易燒起來,會提前把自己燒斷,在程式中宣告的就是變數
//變數(variable)
private int a;
//屬性(properties)
private int a{ ... }
屬性通常針對外來參數,也就是其他程式的參數,所以常用公開存取修飾詞
//變數(variable)
private int a;

//屬性(properties)
public int A{ ... }
如果不知道為什麼要大寫,請參考

讀(get)

讀(get)存取子(accessor)決定屬性(properties)
回傳(return)變數(variable)給誰。
//完整寫法
private int a;
public int A;
{
  get
  {
    return a;
  }
}
//properties使用Lambda方式撰寫
public int A;
{
  get =>a;
}

寫(set)

寫(set)存取子(accessor)決定屬性(properties)
改寫「此屬性被修改後的原始值」
//套用讀的範例
private int a;
public int A;
{
  get =>a;
  set
  {
    if(A>10)
    {
      A=10;
    }
  }
}
其他程式呼叫的結果
//假設讀寫範例的類別(class)名稱為AA
//假設這兩個程式位於同個物件
public AA AA;
AA = getComponent<AA>();
AA.a=1 (無法使用)
AA.a=99(無法使用)
AA.A=1 (AA中的a=1)
AA.A=99(AA中的a=10)

名詞介紹

唯獨(readonly)(唯讀屬性)

  沒有讀(set)存取子(accessor)會視為唯獨。

沒有 set 存取子的屬性會視為唯讀。 沒有 get 存取子的屬性則視為唯寫。 具有這兩個存取子的屬性是讀寫。

唯寫(readwrite)(唯寫屬性)

  沒有讀(get)存取子(accessor)會視為唯寫。  

讀寫(屬性)

  讀(get)、寫(set)存取子(accessor)均存在  

結尾

  本文章參考微軟C#,連結放置最下方,有興趣看官方更詳細的範例可以點及參考,這篇主要是概述和解釋,不過詳細的講解。
  寫這篇文章意外的花了我想當久的時間,要找資料查原文,切換微軟C#不同的語言模式,寫了將近兩個小時,不得不說藉由撰寫解釋,我對讀寫瞭解更加詳細了。
為什麼會看到廣告
avatar-img
106會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
瓶裝雪的沙龍 的其他內容
這篇文章會帶你了解Unity中Inspector最基本項目中的Tag&Layer,以及Tag相關應用。
這篇文章會介紹一個靜態浮點數Time.deltaTime,並教導你製作計時器,以及計時器的相關知識與使用建議。
撰寫程式時,有沒有想過宣告的這些變數是怎麼運作的呢? 本文介紹了Value Type跟Reference Type,以及Variable的基本命名方式。
撰寫程式,如何命名很重要,本文舉例了兩種廣泛使用的命名法則,同時收錄了好程式的判斷依據和減少資源浪費的撰寫方式。
這篇文章會帶你了解Unity中Inspector最基本項目中的Tag&Layer,以及Tag相關應用。
這篇文章會介紹一個靜態浮點數Time.deltaTime,並教導你製作計時器,以及計時器的相關知識與使用建議。
撰寫程式時,有沒有想過宣告的這些變數是怎麼運作的呢? 本文介紹了Value Type跟Reference Type,以及Variable的基本命名方式。
撰寫程式,如何命名很重要,本文舉例了兩種廣泛使用的命名法則,同時收錄了好程式的判斷依據和減少資源浪費的撰寫方式。
你可能也想看
Google News 追蹤
Thumbnail
這個章節主要介紹了Swift程式語言中物件導向程式設計的基本概念,包括類別、建構子、公開、私有、受保護等等的概念。同時,也介紹了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射等進階特性。
Thumbnail
本章節是一個初級的 TypeScript 教學,主要介紹了 TypeScript 中物件導向程式設計的各種核心概念,包括類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等。每個概念都通過詳細的解釋和實例代碼來進行深入的介紹。
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
內容涵蓋資料型別、型別轉換、自訂型別、元組型別、集合型別和字典型別等主題。文章首先詳述內建型別如bool、byte、char等的定義和使用,接著討論型別轉換,包括隱含轉換和明確轉換。之後文章介紹自訂型別的建立,以及元組、集合、陣列和字典型別的操作與例子。
Thumbnail
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
前幾篇討論到各種裝飾器的用法,本文將介紹另外一種裝飾器,可以將方法轉換成屬性來使用。 property也可以動態的取出物件的值,隨著時間或其他運算改變所產生的值,讓我們繼續往下看更多介紹吧。
物件導向設計的一個重點就是封裝,這有很多層面上的意義,但基本上就是控制物件的成員變數和方法的存取權。物件導向的封裝還跟繼承機制有關,這使得有一些時候我們逼不得已必須把函式定義在類別上,這種做法使得物件的功能變得難以拆解。封裝應該是模組的職責,並不需要再給物件相同的能力。 一般的模組系統就是把相
上一篇文章提到有些介面不應被繼承,但物件導向的子類別只能繼承父類別的介面,因而產生一些不合適的介面實作。trait/typeclass則沒有這種繼承機制,這似乎使需要繼承的特性無法直接使用。然而函數式導向比起繼承,更適合使用組合,根本不需要使用繼承疊加特性。 資料類型的定義往往跟怎麼建構模型相
Thumbnail
這個章節主要介紹了Swift程式語言中物件導向程式設計的基本概念,包括類別、建構子、公開、私有、受保護等等的概念。同時,也介紹了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射等進階特性。
Thumbnail
本章節是一個初級的 TypeScript 教學,主要介紹了 TypeScript 中物件導向程式設計的各種核心概念,包括類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等。每個概念都通過詳細的解釋和實例代碼來進行深入的介紹。
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
內容涵蓋資料型別、型別轉換、自訂型別、元組型別、集合型別和字典型別等主題。文章首先詳述內建型別如bool、byte、char等的定義和使用,接著討論型別轉換,包括隱含轉換和明確轉換。之後文章介紹自訂型別的建立,以及元組、集合、陣列和字典型別的操作與例子。
Thumbnail
C#程式由一或多個檔案組成,包含命名空間、類別、結構、介面、列舉和委派等型別。Main方法是C#應用程式的進入點。在C#中,註解用於在程式碼中添加說明,有單行和多行兩種類型。變數的定義需要指定變數的類型和名稱,可以一次為多個變數賦值。
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
前幾篇討論到各種裝飾器的用法,本文將介紹另外一種裝飾器,可以將方法轉換成屬性來使用。 property也可以動態的取出物件的值,隨著時間或其他運算改變所產生的值,讓我們繼續往下看更多介紹吧。
物件導向設計的一個重點就是封裝,這有很多層面上的意義,但基本上就是控制物件的成員變數和方法的存取權。物件導向的封裝還跟繼承機制有關,這使得有一些時候我們逼不得已必須把函式定義在類別上,這種做法使得物件的功能變得難以拆解。封裝應該是模組的職責,並不需要再給物件相同的能力。 一般的模組系統就是把相
上一篇文章提到有些介面不應被繼承,但物件導向的子類別只能繼承父類別的介面,因而產生一些不合適的介面實作。trait/typeclass則沒有這種繼承機制,這似乎使需要繼承的特性無法直接使用。然而函數式導向比起繼承,更適合使用組合,根本不需要使用繼承疊加特性。 資料類型的定義往往跟怎麼建構模型相