当前位置: 首页 > 编程语言 > C#

一个返回派生类实例的抽象方法分享

时间:2023-04-10 19:36:16 C#

AnAbstractMethodReturninganInstanceofaDerivedClass是否可以创建一个必须返回派生类实例的抽象方法?我可以这样做:abstractclassBase{publicabstractBaseGetObj();}classDerived:Base{publicDerived(){}publicoverrideBaseGetObj(){returnnewDerived();但我想知道是否有办法做到这一点,Derived::GetObj()被强制返回Derived?谢谢。使用泛型应该使这成为可能:abstractclassBasewhereT:Base{publicabstractTGetObj();}classDerived:Base{publicDerived(){}publicoverrideDerivedGetObj(){returnnewDerived();}}你可以进一步简化这个(如果所有派生实例都是用默认构造函数创建的):}}classDerived:Base{publicDerived(){}}你拥有的几乎是一个抽象工厂,但不完全是。我首先要说的是,您应该将其留给派生类的实现者来解决,或者只是相信他们会这样做。另一个答案显示了所谓的奇怪的重复模板模式。这里有一个基类试图使用类型系统强制派生类型在某些输入或输出位置使用自身。publicabstractclassFoowhereT:FoopublicclassBar:Foo这个想法可能适用于其他语言。如果人们正确使用它,它只适用于C#。有了上面的Bar定义,现在我也可以拥有publicclassBaz:Foo,这是完全合法的。Bar是一个Foo,这就是Baz需要使用它的全部内容。没有什么需要Baz实际使用Foo。C#中的类型系统根本无法强制执行您想要强制执行的内容。即使使用此模式,您仍然处于与以前相同的位置。您仍然必须相信派生类的实现者能够正确地完成它。有关此主题的更多信息,您可以阅读此博客。以上就是C#学习教程的全部内容:一个返回派生类实例的抽象方法。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: