【发布时间】:2014-03-07 01:19:33
【问题描述】:
我不明白为什么用参数Double[]执行构造函数?
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyConsoleApp
{
class Program
{
static void Main(string[] args)
{
D myD = new D(null);
Console.ReadLine();
}
}
public class D
{
public D(object o)
{
Console.WriteLine("Object");
}
public D(double[] array)
{
Console.WriteLine("Array");
}
public D(int i)
{
Console.WriteLine("Int");
}
}
}
我认为是因为第一个构造函数采用引用类型的参数。第一个带有引用参数的构造函数,因为null 是引用类型的默认值。
但我不明白为什么不object,它也是一个引用类型。
【问题讨论】:
-
你在这里自找麻烦。如果您要使用重载,则包含作为对象的一般类型将在某些时候导致痛苦
-
@DavidHeffernan IDK。在大多数情况下,我认为调用哪个方法是相当直观的。只有在没有其他方法可以调用时,才会调用对象 one。直觉上这是有道理的,因为相反是无稽之谈
-
这是一个很好的面试问题! :)
-
如果您添加另一个具有其他引用类型的构造函数,您将出现此错误“调用不明确”
-
只要遵循一些好的做法,你就不会遇到这样的问题。在构造函数中,您应该传递一个创建的对象不能没有的依赖项。所以传递 null 不是最佳实践(不仅在构造函数中)。
标签: c# constructor overloading constructor-overloading