首页 / 知识
关于.net:接口/抽象类中的静态方法
2023-04-12 10:12:00

Static Methods in an Interface/Abstract Class首先,我理解接口或抽象类(在.NET / C#术语中)不能具有抽象静态方法的原因。我的问题更侧重于最佳设计解决方案。 我想要的是一组"辅助"类,它们都有自己的静态方法,这样如果我从第三方供应商那里得到对象A,B和C,我可以使用诸如
由于我的AHelper,BHelper和CHelper类都基本上都有相同的方法,因此将这些方法移动到这些类随后派生的接口似乎是有意义的。但是,希望这些方法是静态的,使我无法使用通用接口或抽象类来导出所有这些方法。 我总是可以使这些方法非静态,然后首先实例化对象,如
但是,这段代码对我来说似乎并不直观。你有什么建议?我应该完全放弃使用接口或抽象类(我现在的情况)还是可以重构这些以完成我正在寻找的设计? 如果我是你,我会尽量避免任何静电。恕我直言,我总是以静态方式结束某种同步问题。话虽如此,您正在使用模板呈现通用编程的经典示例。我将在上面的一篇文章中介绍Rob Copper提供的基于模板的解决方案。 对于示例的通用解决方案,您可以执行以下操作:
看看你的回答我正在考虑以下几点:
我更喜欢第二种选择,虽然它当然取决于你。如果您需要我进一步了解详情,请告诉我,我将很乐意编辑/更新:) 您不能通过改变返回类型来重载方法。 您可以使用不同的名称:
或者您可以使用强制转换运算符创建一个类:
然后你可以像这样调用它:
ObjectA和AHelper如何相关? 如果是,那么基于Utility类的方法如何(仅使用公共静态方法且没有状态的类)
我个人也许会质疑为什么每个类型在进一步思考之前都需要静态方法。
为什么不用他们需要共享的静态方法创建一个utlity类? (例如 根据我对这类"障碍"的体验,问题不在于语言的局限性,而在于我设计的局限性。 在C#3.0中,静态方法可以在接口上使用,就好像它们是使用扩展方法的一部分一样,如下面的DumpToDatabase():
marxidad只是一个快速的注意事项,Justin已经说过SQL的变化很大程度上取决于类型,所以我的工作基础是它可能是完全不同的类型,因此将它委托给有问题的子类。而你的解决方案非常紧密地将SQL与Type相连(即它是SQL)。 rptony关于可能与静力学同步问题的好点,我没有提到,所以谢谢你:)另外,它的Rob Cooper(不是铜)BTW;):D(编辑:只是想我会提到它以防万一'打字错误,我希望它是,所以没问题!) 您在寻找多态行为吗?然后你会想要接口和普通的构造函数。调用构造函数有什么不直观的?如果你不需要多态(听起来你现在不使用它),那么你可以坚持使用静态方法。如果这些都是供应商组件周围的包装器,那么您可能尝试使用工厂方法来创建它们,如VendorBuilder.GetVendorThing("A"),它可以返回类型为IVendorWrapper的对象。 如何在Stack Overflow上发布反馈?编辑我的原始帖子或发布"答案"?无论如何,我认为可能有助于举例说明AHelper.RetrieveByID()和BHelper.RetreiveByID()的情况。 基本上,这两种方法都针对第三方Web服务,它使用Query方法返回各种通用(可转换)对象,该方法接受伪SQL字符串作为其唯一参数。 因此,AHelper.RetrieveByID(字符串ID)可能看起来像
希望这会有所帮助。如您所见,这两种方法类似,但根据返回的不同对象类型,查询可能会有很大不同。 哦,Rob,我完全同意 - 这很可能是我设计的限制,而不是语言。 :) |
最新内容
相关内容
python静态方法怎么使用self
python静态方法怎么使用self,培训,管理,不了,方法,静态,属性,实例,变量,对象,参数,python-静态方法,类方法,属性方法静态方法实际上与类(或者实关于Java:为什么我不能在接口中声明
关于Java:为什么我不能在接口中声明静态方法?,关于Java:为什么我不能在接口中声明静态方法?,声明,静态方法,接口,这一,Why can't I decl关于c#:LINQ,在映射中实现接口和异常
关于c#:LINQ,在映射中实现接口和异常的实体,关于c#:LINQ,在映射中实现接口和异常的实体,模式,我在,工作,Interface,LINQ, entity that impl关于架构:不同逻辑层上的接口
关于架构:不同逻辑层上的接口,关于架构:不同逻辑层上的接口,业务逻辑,数据访问,应用程序,描述,Interfaces on different logic layers关于c#:扩展接口模式
关于c#:扩展接口模式,关于c#:扩展接口模式,扩展,接口,拆分,功能,Extension interface patterns.Net 3.5中的新扩展允许从接口中拆分功能关于C#:何时在嵌入式系统中使用类型
关于C#:何时在嵌入式系统中使用类型抽象,关于C#:何时在嵌入式系统中使用类型抽象,用于,类型,嵌入式系统,这是,When should I use type如何在C#中创建树视图首选项对话框
如何在C#中创建树视图首选项对话框类型的接口?,如何在C#中创建树视图首选项对话框类型的接口?,对话框,应用程序,首选项,就像,How to crea关于.net:为什么我不能在C#中使用抽
关于.net:为什么我不能在C#中使用抽象静态方法?,关于.net:为什么我不能在C#中使用抽象静态方法?,抽象类,情况,静态方法,抽象,Why can't IJavaScript 静态方法
JavaScript 静态方法,JavaScript,静态,方法,静态,方法,是,使用,static,,静态方法是使用 static 关键字修饰的方法,又叫类方法,属于类在对象noob中使用静态方法
在对象noob中使用静态方法,在,对象,noob,中,使用,静态,方法,如果,你,想在,,如果你想在对象 noob 中使用静态方法,可以作为一个参数传