Question

Il semble que je devrais le savoir et je pensais que je l'ai fait. Je classe modèle de vue base, il j'ai plusieurs propriétés, mais ils ont tous faire usage de getter automatiques et setters donc bien sûr les tous fonctionnent très bien, mais j'ai une qui doit diffuser un événement (je suis en utilisant un prisme) de sorte qu'il semble comme ça.

protected bool isValid;
public bool IsValid
{
  get { return isValid; }
  set
  {
    isValid = true;
    this.EventAggregator.GetEvent<ViewModelValidEvent>().Publish(isValid);
  }
}

Le problème que je reçois est lorsque je tente d'assigner IsValid dans une classe dérivée de celle-ci - l'erreur du compilateur dit qu'il est en lecture seule ... Je pensais protégé était ce que je dois faire pour y remédier n'a pas.

De plus - je continue à avoir à déclarer ces variables privées pour tout quand j'ai besoin le poseur d'appeler RaisePropertyChanged ou quoi que ... Y at-il une meilleure façon de le faire?

point Quelqu'un peut-moi dans la bonne direction? Merci !!!

Était-ce utile?

La solution

Je suppose que vous essayez d'utiliser isValid sur un objet qui n'est pas connu (par le compilateur) être une instance de la classe dérivée ou une sous-classe de la classe dérivée. protected a une sémantique relativement subtiles comme ça.

Personnellement, je vous encourage à garder vos champs, quoique privé et les propriétés d'utilisation de toute autre classe -. Même une classe dérivée

En ce qui concerne une façon plus simple de mettre en œuvre les propriétés - Je ne pense pas qu'il y ait un vraiment, non. Vous pourriez avoir un type d'emballage, mais vous auriez encore besoin de créer une variable pour tenir l'instance du type d'emballage, et les accesseurs get / mis à proxy à la variable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top