Tengo una clase LoginManager que tiene un campo privado currentUser y una propiedad pública CurrentUser para no permitirme cambiar accidentalmente el valor de CurrentUser desde fuera de la clase LoginManager .
CurrentUser es { get; } solo, pero aún puedo cambiar las propiedades en el currentUser subyacente que es privado.
p.ej.
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()); // trueLoginManager.cs
public class LoginManager { private User? currentUser { get; set; } private readonly ApplicationDbContext dbContext; public event EventHandler CurrentUserChanged; public User? CurrentUser { get { return currentUser; } } //... }Usuario.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; } } Lo quiero para que no pueda cambiar CurrentUser desde fuera de la clase LoginManager . ¿Alguien podría indicarme la dirección correcta?
Creo que veo el problema, las instancias privadas de CurrentUser get y set propiedades que están expuestas fuera de la clase, ya que esas variables miembro tienen un alcance public .
¿Por qué no hacer que las propiedades del User sean private ?
public class User { private Guid Id { get; set; } private string Name { get; set; } private string Username { get; set; } private string Password { get; set; } private bool ClockedIn { get; set; } } O si necesita get el private set marcas de propiedades:
public class User { public Guid Id { get; private set; } public string Name { get; private set; } public string Username { get; private set; } public string Password { get; private set; } public bool ClockedIn { get; private set; } } O hágalos explícitamente de readonly para que solo puedan inicializarse en el Constructor :
public class User { public readonly Guid Id { get; private set; } public readonly string Name { get; private set; } public readonly string Username { get; private set; } public readonly string Password { get; private set; } public readonly bool ClockedIn { get; private set; } public User(Guid Id, string Name, string Username, string Password, bool ClockedIn) { this.Id = Id; this.Name = NameName; this.Username = Username; this.Password = Password; this.ClockedIn = ClockedIn; } }