Modification des propriétés spécifiques de type mise en œuvre de l'interface
-
22-09-2019 - |
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!
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");
}