此代码是否描述了C#中的存在类型?

时间:2010-05-19 03:59:17

标签: c# existential-type

目前正在观看Bart De Smet的explanation IQueryable,他提到了存在类型(我一直很好奇)。在阅读了这个question的答案后,我只是想知道这是否是用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...
        }
    }
}

这个想法是,如果将所有具体类定义为私有嵌套类(或者可能只是内部类),那么您将被迫只使用该接口。

2 个答案:

答案 0 :(得分:1)

听起来很像pImpl idiom

我不是欺骗开发人员或强迫他们以这些方式做某些事情的忠实粉丝。在C / C ++中,我可以理解pImpl习语的理由,因为C ++在C#和.net中缺少很多保护,但是很好。

答案 1 :(得分:0)

不,这不是存在主义类型。在关于存在类型的另一个问题的答案中,请查看VirtualMachine示例。