0

我正在寻找专门覆盖 System.IO.Directory 类,以便我可以覆盖 Delete 方法,因为我收到一条错误消息,提示“目录不为空”。我想保留该类的所有其他方法,只需在 Delete 方法的代码中添加一些额外的逻辑,因为似乎导致错误的是服务器上的竞争条件,其中文件删除尚未在服务器上提交在它报告所有文件已被删除之前。

我可以在另一个类中编写一个自定义函数来执行此操作,但我的公司生产它自己的框架,我认为它对可能也会遇到此错误的其他开发人员很有用。

任何人都可以建议一个代码模式来模拟静态继承而不包装 System.IO.Directory 类的每个公共成员吗?

4

1 回答 1

1

简短的回答:

您不能覆盖未设计为被覆盖的方法 - 这是设计使然。

长答案:

库具有相互依赖关系,假设您有以下加载的依赖关系:

Main.exe
   | ->  A.dll
   |       |
   |       v
   | ->  B.dll     

A.dll依赖的开发者B.dll,他们对B.dll的工作方式有一定的期待。

如果您被允许以未定义的方式(不使用继承)更改 B 的行为,那么开发人员A.dll将没有任何信心B.dll去做他们期望的事情,这将违反直觉并且容易出错。(这也是sealed关键字存在的原因)

如果您考虑 .net 框架库,这也是正确的——它们具有相互依赖关系并期望其他 .net 框架库以特定方式工作。很可能其他框架类调用System.IO.Directory.Delete方法的原因你甚至都不知道,如果你改变了该方法的工作方式,它可能会破坏很多事情。

备择方案:

一个建议是创建一个DirectoryEx可以在那里静态定义您的自定义Delete方法的类。您将能够在您自己的代码中使用您的自定义方法,但其他代码(不是您编写的)仍然有信心删除方法按预期工作。

于 2015-10-20T21:42:36.003 回答