目前正在观看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...
}
}
}
这个想法是,如果将所有具体类定义为私有嵌套类(或者可能只是内部类),那么您将被迫只使用该接口。
答案 0 :(得分:1)
听起来很像pImpl idiom。
我不是欺骗开发人员或强迫他们以这些方式做某些事情的忠实粉丝。在C / C ++中,我可以理解pImpl习语的理由,因为C ++在C#和.net中缺少很多保护,但是很好。
答案 1 :(得分:0)
不,这不是存在主义类型。在关于存在类型的另一个问题的答案中,请查看VirtualMachine示例。