C# - 屬性:初學者指南

你好,有志於成為程序員的你!今天,我們將踏上一段令人興奮的旅程,探索C#屬性的世界。別擔心如果你是編程新手;我會成為你的友好導遊,一步步解釋所有內容。那麼,讓我們一起深入了解一下吧!

C# - Attributes

什麼是屬性?

想像你正在給朋友寫信。有時候,你可能想在邊緣加上一個小筆記,比如「仔細閱讀這部分!」或「這很重要!」。在C#中,屬性就像是那些邊緣筆記。它們是我們可以添加到代碼中以提供額外信息或指示的特殊標籤。

指定屬性

讓我們從如何在代碼中實際使用屬性開始。這非常簡單 - 我們只需將它放在我們想「標記」的東西正上方的方括號[]中。以下是一個基本示例:

[Obsolete]
public void OldMethod()
{
Console.WriteLine("這個方法已經過時!");
}

在這個例子中,我們使用Obsolete屬性來告訴其他程序員(或我們將來的自己)這個方法已經過時,可能不應該再使用了。

預定義屬性

C#帶有許多內置的屬性,我們可以立即使用。讓我們看看一些最常見的:

AttributeUsage

這個屬性就像是一套針對其他屬性的規則。它告訴C#屬性可以在哪裡以及如何使用。以下是一個示例:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyCustomAttribute : Attribute
{
// 屬性實現
}

這段代碼是在說,「嘿,我的自定義屬性只能用在類或方法上,不能用在其他東西上!」

Conditional

Conditional屬性非常酷炫。它讓我們基於是否定義了特定條件來包含或排除方法。以下是如何操作:

#define DEBUG

[Conditional("DEBUG")]
public void DebugMethod()
{
Console.WriteLine("這只在除錯模式下運行!");
}

如果我們定義了DEBUG(如我們在頂部所做的那樣),這個方法會被包含。如果我們沒有定義,它就像是不存在一樣!

Obsolete

我們之前已經見過這個,但讓我們再深入一點。Obsolete用於標記不再應該使用的代碼:

[Obsolete("使用NewMethod()代替", true)]
public void OldMethod()
{
// 舊的實現
}

true參數使得使用這個方法成為編譯時錯誤,確保沒有人使用它!

創建自定義屬性

現在,讓我們發揮創造力,製作我們自己的屬性!這就像設計自己的特殊貼紙來貼在代碼上。

宣布自定義屬性

首先,我們需要宣告我們的自定義屬性類:

public class AuthorAttribute : Attribute
{
public string Name { get; set; }
public string Date { get; set; }
}

這個屬性將讓我們標記代碼的作者名稱和撰寫日期。

建構自定義屬性

現在,讓我們添加一個構造函數,使其更容易使用:

public class AuthorAttribute : Attribute
{
public string Name { get; set; }
public string Date { get; set; }

public AuthorAttribute(string name)
{
Name = name;
Date = DateTime.Now.ToShortDateString();
}
}

應用自定義屬性

最後,我們可以使用我們閃亮的新屬性:

[Author("John Doe")]
public class MyClass
{
[Author("Jane Smith", Date = "2023-06-15")]
public void MyMethod()
{
Console.WriteLine("Hello, Attributes!");
}
}

這不是很酷嗎?我們剛剛給我們的類和方法加上作者信息!

屬性方法表

這裡是一張一些常見屬性相關方法的便捷表格:

方法 描述
Attribute.GetCustomAttribute() 獲取指定類型的自定義屬性
Attribute.IsDefined() 檢查是否定義了特定的屬性
Type.GetCustomAttributes() 獲取類型的所有自定義屬性
MemberInfo.GetCustomAttributes() 獲取成員的所有自定義屬性

結論

就是这样,各位!我們已經穿越了C#屬性的土地,從預定義的標誌到製作我們自己的自定義標記。屬性可能看起來很小,但它們是為我們的代碼添加元數據的強大工具,使它們更具信息性和更易於管理。

記住,編程就像烹飪一樣 - 練習才能熟練,而且永遠有創造空間。所以不要害怕在你的專案中試驗屬性。誰知道呢?你可能會烹飪出C#的下一個大熱門!

下次見,快樂編程!

Credits: Image by storyset