Miglior esempio di mixin in .NET [chiuso]

6

Voglio presentare il concetto di mixin e la loro implementazione in .NET.

Il modo in cui lavorano in .NET è aggiungere metodi di estensione su un'interfaccia e decorare classi con detta interfaccia.

Quali sarebbero gli esempi migliori per questo modello (diverso da linq)?

    
posta linkerro 19.02.2012 - 09:53
fonte

3 risposte

4

Per quanto ne so, "mixin" è un concetto di Ruby per la gestione di limitazioni di ereditarietà multiple e non ha un modo integrato di farlo in C #, VB.NET o Java.

Il tuo suggerimento di aggiungere metodi di estensione a un'interfaccia è interessante e fornirebbe molti dei benefici di un mixin. Non ho mai visto nessuno farlo in quel modo prima, quindi dovrò metterlo nella mia valigetta ...

Per quanto riguarda l'esempio, penso che quello che hai inserito nel tuo commento sopra non sia cattivo; dimostrando che un pipistrello è un mammifero che può volare. Senza fare il tuo esempio inventato in questo modo, non riesco a pensare a nessun posto dove questo "si verifica" in una delle librerie .NET di base, oltre a Linq (una specie, sebbene anche IEnumerable richieda che tu definisca il metodo GetEnumerator nella classe di implementazione, quindi non è un'interfaccia puramente "vuota" con solo i metodi di estensione.)

C'è un problema nel presentare il tuo esempio inventato?

    
risposta data 19.02.2012 - 15:09
fonte
1

Non so se è il miglior esempio, ma ho un esempio di utilizzo dei metodi di estensione per approssimare i mixins sul mio blog: link

Si noti che in questo modo non si ottengono i mixin, solo qualcosa di simile a mixin dal punto di vista dei codici client.

    
risposta data 20.02.2012 - 07:28
fonte
1

Ho lavorato a un framework Mixin open source per C # pMixins . Sfrutta classi parziali e generatori di codice per collegare la classe Mixin alla destinazione:

//Mixin - Class that contains members that should be injected into other classes.
public class Mixin
{
   // This method should be in several class
   public void Method(){ }
}

//Target (Note: That it is partial) - Add members from Mixin
[pMixn(Target = typeof(Mixin)]
public partial class Target{}


//Example of using Target
public class Consumer
{
    public void Example()
    {
        var target = new Target();

        // can call mixed in method
        target.Method();

        // can implicitly convert Target to Mixin
        Mixin m = new Target();
        m.Method();
   }
}
    
risposta data 09.05.2014 - 14:44
fonte

Leggi altre domande sui tag