Modifica delle proprietà specifiche del tipo di implementazione dell'interfaccia
-
22-09-2019 - |
Domanda
So che questa è una domanda stupida, nel senso che la risposta è probabilmente un "oh ragione, naturalmente!" uno.
Ecco quello che ho:
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;
}
Sto lavorando su un modello personalizzato legante in ASP.NET MVC come il mio modulo di modifica principale eredita da iEvent mentre eseguo un RenderPartial per aggiungere gli altri campi specifici del tipo
Quando arrivo al modello legante, posso vedere tutte le chiavi / valori per il tipo, che è buono. Ora, io voglio fare questo:
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");
}
In sostanza, voglio una variabile iEvent e voglio creare un tipo di evento specifico che implementa iEvent e impostare i campi specifici del tipo. Quello che Visual Studio mi dice è che non può accedere ai campi BirthdayEvent.
Mentre, ho capito questo, non riesco a capire cosa devo fare. Così, questa domanda:)
.Grazie in anticipo!
Soluzione
Quando si crea le istanze di BirthdayEvent
e MeetingEvent
, metterli nelle variabili di quel tipo. In questo modo è possibile assegnare tali membri. Poi li assegna alla variabile _event
. In questo modo:
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");
}
Altri suggerimenti
Qualcosa di lungo queste linee:
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");
}