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

是否可以让参数实现两个接口?分享

时间:2023-04-10 19:12:29 C#

是否可以让参数同时实现两个接口?是否可以定义一个带有必须实现两个接口的参数的函数?(这两个接口是我刚刚记起来的,不是我想用的)privatevoidDoSomthing(IComparable,ICollectioninput){}你可以:1)定义一个接口,继承想要的接口:publicinterfaceICombinedInterface:IComparable,ICollection{...}privatevoidDoSomething(ICombinedInterfaceinput){...}2)使用泛型:privatevoidDoSomething(Tinput)whereT:IComparable,ICollection{...}你可以从这两个接口继承另一个接口并使您的参数实现该接口。好吧,是的,不是。正如史蒂夫建议的那样,您可以创建另一个以您想要的两个开头的第三个接口,并将其用于参数类型。但是,这也要求所使用的类也实现第三个接口。换句话说,这不起作用:publicinterfaceI1{}publicinterfaceI2{}publicclassC:I1,I2{}publicinterfaceI3:I1,I2{}publicclassYourClass{publicvoidTest(I3i){}}...YourClassyc=newYourClass();Cc=新C();yc.Test(c);//不会工作,C不实现I3但是,您可以使用泛型来欺骗编译器。publicclassYourClass{publicvoidTest(Ti)whereT:I1,I2{}}现在它可以工作了。我仍然不是100%确定我不会再给你另一个问题,我将不得不考虑一下。上面提到的泛型函数方法是一个很好的方法,有一个重要的警告:为了对对象进行类型转换以便它可以传递给具有多个泛型约束的例程,满足这些约束的类型必须是已知的并且是父类型被投射到的对象?接受此类对象的例程将知道此类类型(作为泛型类型参数传入),但该类没有保存此信息并在以后使用它的好方法。如果各种不相关的类型都实现了IFoo和IBar,那么很难设计一个例程来获取许多不相关的对象实例,将它们存储在列表或其他东西中,然后将列表中的所有项目传递给该例程使用通用的IFoo+IBar参数。如果这种情况可能是必要的,那么最好的方法是为每个接受例如IFoo类型的参数,并根据需要将其转换为IBar。然后您可以将所有项目存储在列表中并将它们传递给例程。失去了泛型方法的类型安全,但有时无法实现完美的类型安全。以上是C#学习教程:是否可以让参数实现两个接口?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: