通用构造函数中的重载解析

时间:2017-06-05 10:15:29

标签: c# generics overloading overload-resolution constructor-overloading

我创建了一个模型类来说明这个问题:

<div class="main">

  <div class="body-content">
    <div class="blocka">
      <div class="body-content-items">Add All</div>
      <div class="body-content-items">Add All</div>
    </div>
    <div class="blocka">
      <div class="body-content-items">Add All</div>
      <div class="body-content-items">Add All</div>
    </div>
  </div>
</div>

如果我构建任何字符串对象,会怎么样?没有办法区分两个构造函数。定义具有相同参数数量的另一个构造函数是一种不好的做法吗?

Two constructos looks equal

1 个答案:

答案 0 :(得分:1)

编译器将始终选择最具体的重载方法,即签名中具有string参数的方法。即使你有一个泛型方法(或你的情况下是构造函数),显式类型string参数也是最具体的参数。因此

new Anything<string>("test");

将输出

  

我是字符串类型的构造函数

从软件工程的角度来看,这确实是一种不好的做法,因为对于类的用户来说,不清楚为什么例如具有string参数的构造函数将表现出与通用参数不同的行为。< / p>