C# 中的欄位與屬性

Fil Zjazel Romaeus Villegas 2023年1月30日 2022年4月20日
  1. 什麼是類
  2. 什麼是欄位
  3. 什麼是屬性
C# 中的欄位與屬性

本教程將解釋 C# 類中欄位和屬性之間的區別。為了更好地說明這一點,你必須首先了解以下概念。

什麼是類

類是資料成員的集合,使你能夠通過充當物件的藍圖或模板來建立自定義型別。在一個類中,欄位和屬性的相似之處在於它們可以儲存資料,但不同之處在於它們的使用方式。

什麼是欄位

field 將資料儲存為變數。它可以公開,然後通過類訪問,但最好的做法是限制和隱藏儘可能多的資料。通過確保人們可以訪問資料的唯一方法是利用類的公共方法之一,這為你提供了更多控制並避免了意外錯誤。

什麼是屬性

屬性公開欄位。使用屬性而不是欄位直接提供了一個抽象級別,你可以在其中更改欄位,同時不影響使用你的類的物件訪問它們的外部方式。屬性還允許你在設定欄位值或確保資料有效之前進行計算。

例子:

using System;

namespace FieldProperty_Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            //Initialize a new Tutorial_Class
            Tutorial_Class tutorial = new Tutorial_Class();
	
            //Set the field values through its public property
            tutorial.Name = "Sample Tutorial";
            tutorial.Created_Date = new DateTime(2021, 12, 31);
            tutorial.Description = "Sample Description"; 

            //Print the class values to the console
            Console.WriteLine("Tutorial Name: " + tutorial.Name);
            Console.WriteLine("Created Date: " + tutorial.Created_Date.ToShortDateString());
            Console.WriteLine("Sample Description: " + tutorial.Description);

            Console.ReadLine();
        }

        public class Tutorial_Class
        {
            //These are the private fields that are only accessible by the class
            //The actual data is stored here and can be retrieved/set by the properties
            private string name;
            private DateTime created_date;

            //All of the items below are properties that have the power to get and set the field values
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            public DateTime Created_Date
            {
                get { return created_date; }
                set { created_date = value; }
            }
         
            //This is another kind of property, an AutoProperty
            //It acts the same as the original property but does not require you to declare the private field
            //The private field is automatically generated for you
            public string Description { get; set; }

        }

    }
}

在上面的示例中,我們有一個使用欄位、屬性和 AutoProperties 的示例類。初始化 Tutorial_Class 的例項後,我們使用類的公共屬性設定值。你可以注意到,如果你嘗試直接訪問這些欄位,你將收到錯誤 Program.Tutorial_Class.x is inaccessible due to its protection level。最後,我們將值列印到控制檯以顯示已進行更改。

輸出:

Tutorial Name: Sample Tutorial
Created Date: 31/12/2021
Sample Description: Sample Description

相關文章 - Csharp Property