【问题标题】:Can I 'rename' an external exception class? [duplicate]我可以“重命名”外部异常类吗? [复制]
【发布时间】:2015-04-13 15:55:35
【问题描述】:

我正在使用一个希望我使用的外部 SDK

try {
 ...
} 
catch (Ex20301Exception)
{
 ...
}

我宁愿使用

try {
 ...
}
catch (CustomerOverCreditLimitException)
{
 ...
}

有什么方法可以实现吗? 还是我必须和 cmets 一起生活?

【问题讨论】:

  • 只有当你包装了外部代码时,才捕获那些异常并将它们包装在你的异常中。
  • 你可以使用别名,虽然这是每个模块,但没有办法为每个项目创建别名(更不用说每个解决方案)
  • 虽然您可以使用答案中指出的别名来实现此目的,但我认为您不应该这样做,而应该只使用第三方名称。所有这一切都会使其他期望第三方记录的异常类的开发人员感到困惑。如果您想使用更友好的名称(或特定于您的域的名称),请编写一个包装器。
  • 尽管我在上面发表了评论,但我同意@AntP
  • 这使得使用包装器 更多 更方便,而不是更少 - 你的代码应该只有一个与 API 的逻辑接触点,所以只需为部件编写一个适配器您的客户端代码需要的 API 并将该接口公开给应用程序的其余部分。然后问题完全消失,无论您需要使用 API 多少次或在多少地方,直到您需要使用它的 new 部分,那么您只需要一个包装器的小扩展。这促进了良好的封装以及更容易。

标签: c#


【解决方案1】:

您可以创建别名

using CustomerOverCreditLimitException = External.NameSpace.Ex20301Exception;

【讨论】:

  • @AntP 如果很难看到全局配置,我会同意。由于它必须在文件顶部声明,因此造成的损害要小得多。如果使用得当,它实际上可以让代码更容易理解。
  • 恐怕我不能再反对了。我没有积极阅读使用指令的习惯(其他人也没有),并且不得不推断特定类上有别名,这对开发人员来说只是不必要的障碍。它也不能解决开发人员在其他/新地方处理异常的问题。应该保留别名以解决编译器的歧义 - 为了公开特定领域/内部命名,抽象(例如包装器/适配器)更直观并提供更好的封装。
【解决方案2】:

How do I alias a class name in C#? 可能重复

在使用中...

using CustomerOverCreditLimitException = The.Fully.Qualified.Namespace.Ex20301Exception;

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2020-12-11
    相关资源
    最近更新 更多