我一直在想這個問題一段時間,一直沒有找到關於這個主題的很多評論,也沒有能夠自己得出結論。不可變的只讀對象vs具有自動屬性的對象
創建對象時,接受最佳做法是使對象在暴露數據和允許操縱數據方面儘可能有限。如果可以使對象不可變,尤其是在多線程應用程序中,那麼最好這樣做。
話雖如此,C#似乎贊成開發人員不遵循此規則,允許類的定義更簡單,更重要的是,易於維護。
採取以下只讀不可變類:
public class ActiveDirectoryUser
{
private readonly string firstName, lastName, office, username, email;
public ActiveDirectoryUser(string firstName, string lastName, string office, string username, string email)
{
this.firstName = firstName;
this.lastName = lastName;
this.office = office;
this.username = username;
this.email = email;
}
public string FirstName
{
get { return firstName; }
}
public string LastName
{
get { return lastName; }
}
...
public string Email
{
get { return email; }
}
}
而且如下比較它更簡單的例子,這是不是隻讀的。
public class ActiveDirectoryUser
{
public string FirstName
{
get;
set;
}
public string LastName
{
get;
set;
}
...
public string Email
{
get;
set;
}
}
可與下面的實例化是:
ActiveDirectoryUser user =
new ActiveDirectoryUser
{ FirstName= "Sam", LastName = "Shiles", ..., Email ="[email protected]" };
鑑於簡單的定義,代碼的行數更少,爲開發者錯誤的機會就越少,並且易於與其他開發人員可以瞭解代碼(特別是對於比我們簡單的例子更真實的例子),創建適當的只讀,不可變對象的價值是值得的嗎?
而且,做其他人認爲,在C#中做不可變對象應如作出與自動彼岸語法簡單:
public string FirstName {get; readonly set;}
你的第二個例子真的有用嗎?據我所知,你仍然需要提供一個構造函數。 –
不,它不能,你的第二個例子不會工作 – devdigital
對不起,更新了這個問題。 –