2010-02-22 10 views
1

Je sais que c'est une question idiote, en ce sens que la réponse est probablement un "oh bien sûr, bien sûr!" un.Modifier les propriétés spécifiques au type dans la mise en œuvre de l'interface

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 ajouter les autres champs spécifiques au type

Lorsque j'arrive au classeur modèle, je peux voir toutes les clés/valeurs pour le type, ce qui est bon. Maintenant, je veux faire:

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"); 
} 

Essentiellement, 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. Ce que Visual Studio me dit est qu'il ne peut pas accéder aux champs BirthdayEvent.

Bien que, je le comprends, je n'arrive pas à comprendre ce que je dois faire. Ainsi, cette question :).

Merci d'avance!

Répondre

3

Lorsque vous créez d'abord vos instances de BirthdayEvent et MeetingEvent, placez-les dans des variables de ce type. De cette façon, vous pouvez affecter ces membres. Puis attribuez-les à 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"); 
} 
+0

var !!! Génial, Keltex, merci :) – Dan

2

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"); 
}