Alternativa alla proprietà / metodo astratti statici

0

Dal momento che provare a usarli causerà un errore, qual è la soluzione alternativa per ottenere lo stesso effetto di loro?

My Base Class:

public abstract class IPacket
{
    public abstract int Identifier { get; set; }

    public abstract void Handle();
}

Classe figlio:

public class DoSomething : IPacket
{
    public override int Identifier
    {
        get
        {
            return 1;
        }
    }

    public override void Handle()
    {
        // Do Something
    }
}

Instradamento pacchetti in entrata:

Dictionary<Byte, IPacket> Packets = new Dictionary<byte, IPacket>
    {
        {DoSomething.Identifier, DoSomething} // <-- Not Possible
    };

Packets[ID].Handle();

Fondamentalmente ottengo un pacchetto dal Server che contiene un identificatore. Io uso questo identificativo per trovare il gestore di quel pacchetto da un dizionario e passare il pacchetto al suo gestore.

    
posta LRNAB 01.07.2014 - 18:13
fonte

2 risposte

1

Poiché invii Handle su un identificatore e non sulla classe dell'oggetto del pacchetto, non vedo alcun vantaggio nell'avere Handle come metodo degli oggetti pacchetto.

Pensa a circa PacketProcessor che gestisce i pacchetti di un certo tipo e a Dictionary<Identifier, PacketProcessor> .

    
risposta data 01.07.2014 - 19:11
fonte
0
DoSomething newSomething = new DoSomething();
Dictionary<int, IPacket> Packets = new Dictionary<int, IPacket>
{
    { newSomething.Identifier, newSomething } // <-- Possible
};

IPacket come classe astratta e non un'interfaccia non è una denominazione intuitiva.

// Alternatively,
public interface IPacket
{
    int Identifier { get; }
    void Handle();
}

public class DoSomething : IPacket
{
    public int Identifier { get; set; }
    public void Handle() { }
}

...

int id = 1;
Dictionary<int, IPacket> Packets = new Dictionary<int, IPacket>
{
    { id, new DoSomething { Identifier = id } }
};
    
risposta data 01.07.2014 - 19:46
fonte

Leggi altre domande sui tag