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

实现抽象基类以外的常见行为?分享

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

实现抽象基类以外的常见行为?在C#中,我有一个类层次结构,在顶部附近有几个抽象基类,还有很多派生类。其中一些具体类具有相同实现的一些共同属性和方法。我觉得很浪费,所以解决方案可能是在另一个抽象基类中实现这种常见行为。抽象类控制;抽象类SquareControl:Control{publicintSquarishProperty;publicvoidSquarishMethod();};类窗口:SquareControl;类按钮:SquareControl;但是,如果层次结构中的其他几个类共享一些其他行为,但是与另一个基类中的控件共享一些东西呢?也许有很多共同点。使用抽象基类实现对其进行建模是不切实际的吗?抽象类FlashableControl:Control{publicintFlashyProperty;publicvoidFlashMethod();};类StatusBar:FlashableControl;//但它也有点方,嗯...那么你如何在不使用基类的情况下跨类共享这样的实现呢?我想我想将接口的实现委托给另一个类,并让该类代表所需的类实现这些属性和方法,这样对于用户来说,StatusBar和Window似乎支持标准接口,但是在覆盖它之前正在实施其他事情。我可以想象实现这种行为的聚合类,但这是否合适,是否有任何陷阱?有哪些选择?谢谢你可以使用这种模式:publicinterfaceICommonServices{stringSomeProperty{get;放;}voidSomeMethod(字符串参数);}publicstaticclassCommonServiceMethods{publicstaticvoidDoSomething(thisICommonServicesservices,stringparam){services.SomeMethod(services.SomeProperty+":"+param+"somethingextra!");现在,所有实现ICommonServices的类也通过扩展方法获得一些自由行为,这些行为仅依赖于所有ICommonServices实现者公开的那些函数。如果您需要访问基类功能,您可以将它放在您自己的接口中,并让ICommonServices也实现该接口。您现在可以在不使用多个基类的情况下为接口创建“默认”扩展功能。编辑如果你希望其中一些方法是内部的,你可以像这样修改模式:publicclassMyObject:IServices{publicstringPublicProperty{get;私有集;}字符串IServices.SomeProperty{得到;放;}voidIServices.SomeMethod(stringparam){//Dosomething...}}publicinterfaceIPublicServices{stringPublicProperty{get;}}内部接口IServices:IPublicServices{stringSomeProperty{get;放;}voidSomeMethod(字符串参数);}internalstaticclassServiceMethods{publicstaticvoidDoSomething(thisIServicesservices,stringparam){services.SomeMethod(services.SomeProperty+":"+param+"somethingextra!");基本上我们公开了公共和内部接口。请注意,我们显式实现了内部接口方法,因此这些方法不可用于公共消费(因为公共客户端无法访问接口类型。)在这种情况下,辅助扩展方法是内部的并且依赖于内部接口,但是您也可以创建依赖于公共接口的公共辅助方法。您可以使用'has-a'而不是'is-a'并委托给内部方形控件类Window:Control,ISquareControl{privateSquareControlsquare;publicvoidSquareOperation(){square.SquareOperation();}}classSquareControl:Control,ISquareControl{publicvoidSquareOperation(){//...}}一种方法是使用接口和基类。Flashable将是一个很好的接口而不是一个类。以上是C#学习教程:实现抽象基类以外的常见行为?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: