C#快速入門教程(5)——欄位與屬性
欄位(field)和屬性(property),在前面的課程中已經多次使用,本課,我們將繼續討論欄位和屬性應用上的一些細節。
欄位主要用於儲存類或物件的內部資料,大多數情況下,欄位都應該定義為私有的(private),這樣就可以有效的保護內部資料不會被直接或意外修改;屬性則多用於類或物件的公共(public)成員,用於外部設定和讀取資料,當然,也可以根據需要定義屬性資料的設定和讀取操作。
對於相對簡單,比如可以直接設定和讀取的資料項,可以使用簡單的語法定義為屬性,如下面的程式碼。
using System;
namespace ConsoleTest
{
public class CAuto
{
//
public string Model { get; set; }
//
}
}
程式碼中,我們在CAuto類中定義了一個名為Model的屬性,其型別是string,可以存放文字型別的資料,其內容使用一對雙引號包括,如“abc123”。下面的程式碼,我們在Program.cs檔案中測試Model屬性的使用。
using System;
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
CAuto car1 = new CAuto();
car1.Model = "X-18";
Console.WriteLine("汽車型號:{0}", car1.Model);
}
}
}
程式碼執行結果如下圖所示。
本例中,Model屬性的資料可以設定和讀取,這樣的屬性稱為可讀寫屬性,相應的,我們可以控制屬性資料是否可以設定或讀取資料,下面分別討論。
只能讀取資料的屬性稱為只讀(readonly)屬性,如下面的程式碼,我們將Model屬性設定為只讀屬性。
public string Model { get; }
我們可以看到,定義屬性時只包含get塊,這個屬性就是隻讀屬性,可問題是,什麼時候設定它的資料呢?一般來講,只讀屬性的資料可以通過建構函式設定,建構函式是類中的一種特殊的方法,會在建立物件時呼叫,可以通過不同的引數帶入需要的資料,在下一課會詳細討論方法和其引數的設定問題。
此時,還有兩種處理方式,一是通過一個私有欄位存放資料,這也是傳統的屬性處理方式,如下面的程式碼。
using System;
namespace ConsoleTest
{
public class CAuto
{
private string myModel;
// 建構函式
public CAuto(string model)
{
myModel = model;
}
//
public string Model
{
get { return myModel; }
}
//
}
}
這種方式下,需要定義一個私有欄位,如myModel;在建構函式中,會將帶入的資料儲存到myModel欄位中;然後,在Model屬性的get塊中返回myModel欄位的資料,也就是給出了Model屬性的資料。
另一種處理只讀屬性的方式是使用自動屬性,可以在定義屬性時將set語句塊設定為私有的,如下面的程式碼。
using System;
namespace ConsoleTest
{
public class CAuto
{
// 建構函式
public CAuto(string model)
{
Model = model;
}
//
public string Model { get; private set; }
//
}
}
此方式處理只讀屬性需要注意,將set塊設定為私有的,還可以在類的內部,如建構函式中設定屬性值,但在類的外部則不能設定屬性值的操作。我們可以看到,使用後者處理只讀屬性,語法更加簡潔,含義也更加明確,這也是比較推薦的只讀屬性的實現方式。
雖然也可以使用只寫屬性,但實際應用情景並不多,但大家應該知道這種可行性,比如,下面的程式碼就是將LocalModel屬性設定為只寫。
using System;
namespace ConsoleTest
{
public class CAuto
{
// 建構函式
public CAuto() { }
//
public CAuto(string model)
{
Model = model;
}
//
public string Model { get; private set; }
//
private string myLocalModel;
public string LocalModel
{
private get
{
return myLocalModel;
}
set
{
myLocalModel = value;
}
}
//
public void ShowLocalModel()
{
Console.WriteLine("內部型號:{0}", myLocalModel);
}
//
}
}
下面,我們在Program.cs檔案中測試LocalModel屬性的使用。
using System;
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
CAuto car1 = new CAuto("X-18");
car1.LocalModel = "x2018";
car1.ShowLocalModel();
}
}
}
程式碼執行結果如下圖所示。
使用屬性時,還要注意例項屬性和靜態屬性的區別,例項屬性使用物件呼叫,而靜態屬性應該由類呼叫。
CHY軟體小屋原創作品!
相關文章
- C#屬性與欄位C#
- IL角度理解C#中欄位,屬性與方法的區別C#
- C#快速入門教程(25)—— 日期與時間C#
- C#學習筆記-欄位、屬性、索引器C#筆記索引
- 《C#快速入門教程》目錄C#
- C#快速入門教程(16)—— 介面C#
- C#快速入門教程(6)——方法C#
- C#快速入門教程(19)—— 索引器與陣列C#索引陣列
- C#快速入門教程(2)——程式碼與測試C#
- C#快速入門教程(20)—— 字串與正規表示式C#字串
- C#快速入門教程(26)—— 繪圖C#繪圖
- C#快速入門教程(21)—— 泛型C#泛型
- C#快速入門教程(15)—— 繼承C#繼承
- C#快速入門教程(8)——整數C#
- odoo欄位屬性列舉Odoo
- C#快速入門教程(24)—— 路徑、目錄與檔案C#
- C#快速入門教程(17)—— 委託、事件與Lambda表示式C#事件
- C#快速入門教程(28)—— ADO.NETC#
- Kotlin——中級篇(二): 屬性與欄位詳解Kotlin
- Scala的類、屬性、物件欄位物件
- 共有的表單欄位屬性
- 星輝Odoo模型開發教程4-常用欄位屬性Odoo模型
- C#快速入門教程(22)—— 常用集合型別C#型別
- C#快速入門教程(30)—— 繼續學習C#
- C#快速入門教程(18)—— 異常處理C#
- C#快速入門教程(12)—— if語句結構C#
- .Net5 WPF快速入門系列教程
- lambda方法引用獲取欄位屬性
- C#快速入門教程(10)——布林型別與布林運算C#型別
- C#快速入門教程(27)—— SQL Server資料庫C#SQLServer資料庫
- C#快速入門教程(11)—— 字元和字串型別C#字元字串型別
- C#快速入門教程(13)—— switch語句結構C#
- C#快速入門教程(7)——資料型別概述C#資料型別
- C#快速入門教程(23)—— using語句和IDisposable介面C#
- C#快速入門教程(14)—— 迴圈語句結構C#
- C#快速入門教程(4)——類成員的作用域C#
- C#快速入門教程(1)——物件導向程式設計C#物件程式設計
- Materialize快速入門教程