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

C#share_0

时间:2023-04-10 10:42:21 C#

bydefiningabaseclassC#bydefiningabaseclass我试图找到一种从泛型基类派生类的方法。说:sealedpublicclassFinal:Base{}publicclassBase:TwhereT:Anything{//<-Genericsdonotallowthis}在C#中这似乎是不可能的。还有其他解决方案可以实现类似的目标吗?我发现了这个StackOverflow问题,但它似乎并没有解决问题,或者至少我不明白它应该如何解决。编辑:我想要的结果是能够做这样的事情:Anything[]anything;//AssignsomeInstancestoanythingforeach(Finalfinalinanything){//dosomethingwithfinal}我想要的结果是能够做这样的事情Thething:Anything[]anything;//AssignsomeInstancestoanythingforeach(Finalfinalinanything){//dosomethingwithfinal}你的foreach循环说:classAnything:Final{…}。这显然会在您计划和命名时改变继承层次结构。(您的继承关系中不能有循环)。publicclassBase:TwhereT:Anything{...让我详细说明这部分。我会进一步将您的示例简化为classBase:T。这是不可能的,而且有充分的理由。想象一下:classBase:T{publicoverridestringFrobble(){Fiddle();返回"*"+base.Frobble()+"*";}}classA{publicsealedstringFrobble(){…}}classB{}classC{publicvirtualstringFrobble(){…}}abstractclassD{publicabstractvoidFiddle();publicvirtualstringFrobble(){…}}classE{publicvoidFiddle(){…}publicvirtualstringFrobble(){...}}如果你允许classBase:T,你会遇到各种荒谬的情况。编译器如何知道如何正确编译Base并分析依赖它的代码呢?关键是您不能从编译时未知的类派生。T是一个参数,也就是一个变量,一个占位符。所以classBase:T基本上就像说“Base继承自某个(未知)类”。类继承是一种类型关系,需要了解编译时涉及的两种类型。(实际上,这不是一个非常精确的陈述,因为您可以继承泛型类,例如classSpecialList:List。但至少,派生类必须知道成员(方法、属性等)在基类中可用。)这是你想要的吗?sealedpublicclassFinal:Base{}publicclassBase{}只有当Final也是一个泛型类时你才能这样做,像这样:引用类型T或Base的实例,只允许派生自Base的类型:以上是C#学习教程:C#通过定义基类分享所有内容,如果对大家有用需要进一步了解C#学习教程,希望大家多多关注——publicclassBasewhereT:Base本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: