在 api C# 中创建重载方法的正确方法

proper way to create Overload methods in api C#

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

我有以下两种方法。

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 来完成工作。

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

我看过这个 link 但它没有回答我关于什么是正确或不正确的问题: Better way to overload methods in C#

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

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

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

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

I would like to know if this is an acceptable pattern , or should the code be repeated in the second method? What is the best practice for this.

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

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

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