【问题标题】:proper way to create Overload methods in api C#在 api C# 中创建重载方法的正确方法
【发布时间】:2015-09-30 14:49:52
【问题描述】:

这个问题是关于在以下情况下正确和可接受的编码实践。

我有以下两种方法。

public TService GetDuplexClientChannel<T>(BindingType bindingType, EndpointAddress endPointAddress) where T : TService
{
      .. Do work .. then ..
      return InstanceOf(TService);
}

public TService GetDuplexClientChannel<T>(BindingType bindingType, string endPointAddress) where T : TService
{
// Call the above method and just return it.
return GetDuplexClientChannel<T>(bindingType, new EndpointAddress(endPointAddress);

}

在第一个示例中,我有方法 A 来完成工作,方法 B 只是 A 的重载,但调用 A 来完成工作。

我想知道这是否是可接受的模式,还是应该在第二种方法中重复代码?对此的最佳做法是什么。

我查看了此链接,但它没有回答我关于什么是正确或不正确的问题: Better way to overload methods in C#

【问题讨论】:

  • DRY 是一种编程原则,它的意思是“不要重复自己”。重用代码(就像您所做的那样)而不是重复代码并引入双倍的维护工作和难以跟踪的错误(在方法 A 中有效,但在方法 B 中无效)是一种很好的做法。

标签: c# coding-style standards overloading


【解决方案1】:

是的,这绝对是一种可接受的模式,因为在您的情况下,您的通用参数似乎与端点地址的类型无关。

它出现在各种库和框架中,例如 .NET Framework (Console.Write) 或以下 Dapper 来源:

public static Task<IEnumerable<object>> QueryAsync(this IDbConnection cnn, 
    Type type, CommandDefinition command)
{
    return QueryAsync<object>(cnn, type, command);
}

【讨论】:

    【解决方案2】:

    是的。这是在同一个类中重载方法的完全正确的方法。第二种方法不要重复代码。

    【讨论】:

      【解决方案3】:

      我想知道这是否是一种可接受的模式,或者应该 在第二种方法中重复代码?什么是最佳实践 这个。

      这种模式可以在许多实现中看到,因此可以接受。

      为了使您的代码更易于维护,您不应该在任何其他方法中重复它。

      封装是类似情况的最佳实践。

      【讨论】:

      • 顺便说一句:在许多实现中看到的代码不一定可以接受
      • 不是问题中提到的模式,但你是对的@CallumBradbury :)
      猜你喜欢
      • 2010-10-11
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      相关资源
      最近更新 更多