我有一個(gè)類LoginManager
,它有一個(gè)私有字段currentUser
和一個(gè)公共屬性CurrentUser
,不允許自己從LoginManager
類之外意外更改CurrentUser
的值。
CurrentUser
只是{ get; }
,但我仍然可以更改基礎(chǔ)currentUser
中的屬性,它是私有的。
eg.
Console.WriteLine(loginManager.CurrentUser.ClockedIn.ToString()); // true
loginManager.CurrentUser.ClockedIn = false;
Console.WriteLine(loginManager.CurrentUser.ClockedIn.ToString()); // false
loginManager.CurrentUser.ClockedIn = true;
Console.WriteLine(loginManager.CurrentUser.ClockedIn.ToString()); // true
LoginManager.cs
public class LoginManager
{
private User? currentUser { get; set; }
private readonly ApplicationDbContext dbContext;
public event EventHandler CurrentUserChanged;
public User? CurrentUser
{
get { return currentUser; }
}
//...
}
User.cs
public class User
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public bool ClockedIn { get; set; }
}
我想要它,這樣我就不能從LoginManager
類之外更改CurrentUser
。誰能給我指一下正確的方向嗎?
我想我看到了問題所在,私有
CurrentUser
實(shí)例get
和set
屬性在類之外公開,因?yàn)檫@些成員變量的作用域是public
。為什么不將
User
屬性private
設(shè)為private
?或者如果需要
get
屬性標(biāo)記private set
:或者顯式地使它們
readonly
,這樣它們只能在Constructor
中初始化: