继承静态类以重写成员

本文关键字:成员 重写 静态类 继承 | 更新日期: 2023-09-27 18:18:31

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

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

谁能建议一种代码模式来模拟静态继承而不包装System.IO.Directory类的每个公共成员?

继承静态类以重写成员

短答:

你不能重写那些没有被设计为被重写的方法——这是设计的。

长答:

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

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方法。您可以在自己的代码中使用您的自定义方法,但是其他代码(不是由您编写的)仍然可以确信delete方法是按照预期的方式工作的。