在C#開發中,屬性封裝是一種常見的設計模式,它可以幫助我們更好地控制數據的訪問和修改,同時提供更靈活的功能擴展。今天,我們就來探討一個簡單而優雅的屬性封裝示例:Power
和 PowerFormatted
。
1. 問題背景
在實際開發中,我們經常需要處理一些數值類型的數據,比如功率(Power)。這些數據可能需要以不同的格式展示給用戶,比如保留幾位小數。同時,我們還需要確保這些數據的值只能通過類內部的方法來修改,以保證數據的完整性和一致性。
2. 屬性定義
2.1?Power
?屬性
public double Power { get; private set; } = double.NaN;
-
訪問修飾符:
-
public get
:允許外部代碼讀取這個屬性的值。 -
private set
:只允許在類的內部修改這個屬性的值。外部代碼無法直接設置這個屬性的值,只能通過類內部的方法來修改。
-
-
默認值:
double.NaN
,表示這個屬性的初始值是“非數字”(Not a Number)。這通常用于表示未初始化或無效的值。
2.2?PowerFormatted
?屬性
public string PowerFormatted
{get { return Power.ToString("F3"); }
}
-
計算屬性:這個屬性沒有
set
訪問器,它是一個只讀的計算屬性。它的值是根據Power
的值動態計算的,保留三位小數("F3"
)。
3. 示例代碼
以下是一個完整的示例,展示如何使用這兩個屬性:
public class PowerReader
{public double Power { get; private set; } = double.NaN;public string PowerFormatted{get { return Power.ToString("F3"); }}// 方法:更新Power的值public void UpdatePower(double newPower){Power = newPower;}
}public class Program
{public static void Main(){PowerReader powerReader = new PowerReader();// 更新Power的值powerReader.UpdatePower(123.456789);// 讀取Power的值Console.WriteLine("Power: " + powerReader.Power); // 輸出:123.456789// 讀取PowerFormatted的值Console.WriteLine("PowerFormatted: " + powerReader.PowerFormatted); // 輸出:123.457}
}
輸出結果
Power: 123.456789
PowerFormatted: 123.457
4. 優點
-
封裝性:
-
Power
屬性的set
訪問器是私有的,外部代碼無法直接修改它的值,只能通過類內部的方法(如UpdatePower
)來更新。這確保了數據的完整性和一致性。
-
-
靈活性:
-
PowerFormatted
屬性提供了一個格式化后的字符串,方便在UI中展示。這種設計使得數據的展示和存儲分離,提高了代碼的可維護性。
-
5. 總結
通過這種封裝方式,我們可以更好地控制數據的訪問和修改。Power
和 PowerFormatted
的設計符合C#的最佳實踐。希望這個示例能給你帶來一些啟發,幫助你在實際開發中寫出更優雅的代碼。
如果你有任何問題或建議,歡迎在評論區留言,我們一起交流學習!