c# 介紹 Attribute 屬性 []


分類

建立時間: 2023年7月14日 22:40
更新時間: 2023年7月14日 22:40

說明

在開發 Unity c# 腳本中很常看到在成員旁邊加上 [SerializeField],這是 c# 的屬性,但這個屬性不是 Property 而是 Attribute,Attribute 也被稱為特性,本篇將介紹 c# Attribute。

為了區分 Attribute 和 Property,我將用特性表示 Attribute。

什麼是特性

以下是我的個人見解,簡單的說它是一種標籤功能,就好像每個人身上都被貼標籤,例如:性別標籤、愛吃東西的人標籤,客家人常被貼吝嗇標籤等等,實際上我剛剛提到的也可以用變數儲存,但標籤就好像是一種這邊可以貼,那邊也可以貼,比較沒有受到物件導向的限制,例如:性別,一般只有人類會區分男性、女性,但我硬要說太陽是男的,這就明顯在物件導向的概念中不合理,因為太陽沒有性別,自然太陽物件就不會有性別屬性,但我卻硬要貼一個性別標籤,認為太陽是男性,而且我還想貼上職業是歌手的標籤。

具體的解釋可以參考這篇

範例

以下是 Microsoft 教學課程 其中一個範例

[Obsolete("ThisClass is obsolete. Use ThisClass2 instead.")]
public class MyClass
{
}

Obsolete 是過時的意思,它被表示程式碼已過時,也就是說 MyClass 是棄用的類別。

自訂特性

以下是 Microsoft 教學課程 的範例

public class MySpecialAttribute : Attribute
{
}

[MySpecial]
public class SomeOtherClass
{
}

MySpecialAttribute 繼承 Attribute 就可以當作特性了,[MySpecial] 就是 MySpecialAttribute 特性,只是它可以省略 Attribute 不寫。

這是一個非常陽春的介紹,更詳細的使用方式請參考 Microsoft 教學課程

自訂特性用途

不知道大家是否好奇,自訂特性要幹嘛,或者好奇為什麼加上 [Obsolete] 就能當作棄用,首先我先說自訂特性其中一個用途就是可以再額外寫程式來取得特性處理其他功能,請參考 一秒看破 C# Attribute 作者分享使用特性來處理匿名顯示功能。

以下是其中程式片段

custom attribute example

custom attribute example

主要就是用 GetCustomAttribute() 方法取得特性。

另一個方面就是整合到其他工具,例如一開始提到 Unity 的 [SerializeField],但這個水太深了,我實在觸碰不到。

結論

以上就是簡單分享特性,基本上大家只要會用就好,若需要自訂特性時再深入研究即可。

觀看次數: 954
attributec#特性屬性
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!