2010-05-19 8 views
1

En train de regarder le explanation de IQueryable de Bart De Smet et il a mentionné les types existentiels (que j'ai été curieux pendant quelque temps). Après avoir lu les réponses à cette question Je me demande si cela est un moyen de construire en C#:Est-ce que ce code décrit un type existentiel en C#?

public abstract class SomeExistentialType 
{ 
    private SomeExistentialType() { } 


    public abstract int Foo(); 

    public ExistentialType Create() 
    { 
     return new ConcreteType1(); 
    } 

    private class ConcreteType1: SomeExistentialType 
    { 
     public override int Foo() 
     { 
      //some implementation... 
     } 
    } 

    private class ConcreteType1: SomeExistentialType 
    { 
     public override int Foo() 
     { 
      //some implementation... 
     } 
    } 

    private class ConcreteType1: SomeExistentialType 
    { 
     public override int Foo() 
     { 
      //some implementation... 
     } 
    } 
} 

L'idée est que si toutes les classes concrètes sont définies comme des classes imbriquées privées (ou peut-être juste classes internes), vous êtes obligé de n'utiliser que l'interface.

+0

Certaines personnes ont commenté l'une des demandes de fonctionnalités que j'avais faites sur le site Microsoft .Connect pour expliquer le besoin de types existentiels. C'est la première fois que j'entends parler de cette phrase. https://connect.microsoft.com/VisualStudio/feedback/details/576675/feature-request-for-composable-generic-types-within-a-type-definition?wa=wsignin1.0#details – jpierson

Répondre

1

Semble beaucoup comme le pImpl idiom. Je ne suis pas un grand fan de tromper le développeur ou de les forcer à faire quelque chose de spécifique de ces façons. En C/C++ je pourrais comprendre la justification de l'idiome de pImpl, parce que C++ manque beaucoup de protections que vous obtenez dans C# et .net, mais oh bien.

+0

Je ne sais pas t obtenir une protection du tout. Il n'ajoute aucune information au produit construit. – Dani

0

Non, ce n'est pas ce qu'est un type existentiel. Dans la réponse à l'autre question sur les types existentiels, regardez l'exemple VirtualMachine.