J'ai un cas d'utilisation que je n'ai jamais vraiment traité auparavant. J'ai un objet qui après que l'utilisateur clique sur "Enregistrer" ne devrait pas être changé. Initialement j'ai créé deux objets, DraftObject
et SavedObject
. Pour ce dernier, j'ai créé un constructeur qui n'acceptait que DraftObject et définissait chaque propriété comme un ensemble protégé.Empêche la modification d'un objet après son entrée dans un certain état? (C#)
Cela fonctionne mais ne semble pas idéal. Il semble que je devrais être en mesure de définir une propriété sur mon objet qui contrôle si les autres champs sont modifiables. Quelle est la meilleure façon de faire cela? Pardonnez mon pseudo-code, mais ce que je caressait:
public class MySpecialObject {
public virtual string MyProperty { get { return MyProperty; }
set {
if (State == "Locked")
{
return;
} else
{
MyProperty = MyProperty;
}
}
public virtual string State { get { return State; }
set {
if (State == "Locked")
{
return;
} else
{
State = State;
}
}
Cela semble laid, surtout si je dois le faire pour chaque propriété unique dans ma classe. Il doit y avoir une meilleure façon de faire cela, des idées?
votre approche semble OK pour moi; C'est ce que 'SecureString' fait avec la méthode' MakeReadOnly' http://msdn.microsoft.com/en-us/library/system.security.securestring.makereadonly.aspx. Cela déclenche une exception 'InvalidOperationException' si un appelant tente de modifier la chaîne après l'appel de 'MakeReadOnly'. – JLWarlow