1

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

 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");
        }
    }

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

两个构造函数看起来相等

4

1 回答 1

1

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

new Anything<string>("test");

将输出

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


从软件工程的角度来看,这确实是一种不好的做法,因为类的用户并不清楚为什么带有string参数的构造函数会表现出与通用构造函数不同的行为。

于 2017-06-05T10:19:40.893 回答