Question

Je sais que cela est une question stupide, en ce que la réponse est probablement un « oh droit, bien sûr! » une.

Voici ce que j'ai:

public interface IEvent {
  int Id
  string Title

}

public class MeetingEvent : IEvent {
  int Id
  string Title

  //Meeting Properties
  string Room;
  User Organizer; 
}

public class BirthdayEvent : IEvent {
  int Id
  string Title

  //Bday Properties
  int Candles;
  bool Surprise;

}

Je travaille sur un modèle de liaison personnalisé dans ASP.NET MVC comme mon principal formulaire d'édition hérite de IEvent alors que je joue un RenderPartial d'ajouter les autres champs spécifiques de type

Quand je reçois au classeur modèle, je peux voir toutes les clés / valeurs pour le type, ce qui est bon. Maintenant, je veux faire ceci:

IEvent _event;

switch (eventType) {  // EventType is an enum
  case EventType.Birthday:
    _event = new BirthdayEvent();

    _event.Candles= GetValue<int>(bindingContext, "Candles");
    _event.Surprise= GetValue<bool>(bindingContext, "Surprise");
    break;

  case EventType.Meeting:
    _event = new MeetingEvent();

    // Meeting-specific fields are set here...
    break;

  default:
    throw new InvalidOperationException("Invalid Event Type");
}

En substance, je veux une variable IEvent et je veux créer un type d'événement spécifique qui implémente IEvent et définir les champs spécifiques de type. Qu'est-ce que Visual Studio me dit est qu'il ne peut pas accéder aux champs de BirthdayEvent.

Alors, je comprends cela, je ne peux pas à comprendre ce que je dois faire. Ainsi, cette question:)

.

Merci d'avance!

Était-ce utile?

La solution

Lorsque vous créez vos instances de BirthdayEvent et MeetingEvent, les mettre dans des variables de ce type. De cette façon, vous pouvez affecter ces membres. Ensuite, les assigner à votre variable _event. Comme ceci:

switch (eventType) {  // EventType is an enum
  case EventType.Birthday:
  {
    var be = new BirthdayEvent();

    be.Candles= GetValue<int>(bindingContext, "Candles");
    be.Surprise= GetValue<bool>(bindingContext, "Surprise");
    _event = be;
    break;
  }
  case EventType.Meeting:
  {
    var me = new MeetingEvent();

    // Meeting-specific fields are set here...
    _event = me;
    break;
  {
  default:
    throw new InvalidOperationException("Invalid Event Type");
}

Autres conseils

Quelque chose le long de ces lignes:

IEvent _event;

switch (eventType) {  // EventType is an enum
  case EventType.Birthday:
    var birthdayEvent = new BirthdayEvent();

    birthdayEvent.Candles= GetValue<int>(bindingContext, "Candles");
    birthdayEvent.Surprise= GetValue<bool>(bindingContext, "Surprise");
    _event = birthdayEvent;
    break;
  /* etc */

  default:
    throw new InvalidOperationException("Invalid Event Type");
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top