【发布时间】:2017-06-05 10:15:29
【问题描述】:
我创建了一个模型类来说明问题:
public class Anything<T>
{
/// <summary>
/// Generic typed constructor
/// </summary>
/// <param name="param1"></param>
public Anything(T param1)
{
Console.WriteLine("I'm generic typed constructor");
}
/// <summary>
/// String typed constructor
/// </summary>
/// <param name="param1"></param>
public Anything(string param1)
{
Console.WriteLine("I'm string typed constructor");
}
}
如果我构建任何字符串对象会怎样?没有办法区分这两个构造函数。用相同数量的参数定义另一个构造函数是一种不好的做法?
【问题讨论】:
-
其实是有办法的。如果可能,编译器将使用非泛型重载。所以如果字符串有什么特别之处,这不是一个坏习惯
-
您的问题到底是什么?这是如何工作的(阅读有关重载解决方案,请参阅副本),将调用哪个(运行它)或者这是否是一种不好的做法(基于意见)?如果您提供一个真实的用例,则可以显示替代方案。该用例将解释为什么您认为首先需要字符串重载,然后将遵循如何减轻歧义。再次,参见重复。 :)
标签: c# generics overloading overload-resolution constructor-overloading