2010-05-19 97 views
1

目前正在观看IQueryable的Bart De Smet的explanation,他提到了存在类型(我一直很好奇)。阅读答案,这样question后,我只是想知道,如果这是一种方法来构建它在C#:此代码是否描述了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... 
     } 
    } 
} 

的想法是,如果所有的具体类都被定义为私有的嵌套类(或者只是内部类),那么你只能使用接口。

+0

我有一些人评论说,我已经在Microsoft .Connect网站上做了一个功能要求,作为对存在类型需求的解释。这是我第一次听到这句话。 https://connect.microsoft.com/VisualStudio/feedback/details/576675/feature-request-for-composable-generic-types-within-a-type-definition?wa=wsignin1.0#details – jpierson 2010-12-23 02:04:50

回答

1

听起来很像pImpl idiom

我不是一个欺骗开发者或强迫他们在这些方面做某些事情的人。在C/C++中,我可以理解pImpl习惯用法的理由,因为C++缺乏很多C#和.net中的保护,但是很好。

+0

我不'根本没有得到保护。它没有增加任何信息到建成的产品。 – Dani 2011-10-11 05:17:24

0

不,这不是什么存在类型。在关于存在类型的其他问题的答案中,查看VirtualMachine示例。