为什么DateTime.ToDateTime()不能编译?

时间:2014-01-23 11:33:51

标签: c# .net interface

这是this question的后续内容,我尝试过但未能在我的回答中解释。

DateTime实现IConvertible。你可以证明这一点,因为

IConvertible dt = new DateTime();

编译没有问题。

您可以编写以下代码,但没有编译错误

IConvertible dt = new DateTime();
dt.ToDateTime(val);

但是如果你编写下一个代码片段就不会编译

DateTime dt = new DateTime();
dt.ToDateTime(val);
  

'System.DateTime'不包含'ToDateTime'的定义

如果DateTime实现了接口,为什么你不能在DateTime上调用该方法,除非它被转换为IConvertible?

1 个答案:

答案 0 :(得分:12)

由于DateTime显式实现了IConvertible接口,因此该方法列在MSDN上的Explicit Interface Implementations部分中。以下是它的实施方式:

DateTime IConvertible.ToDateTime(IFormatProvider provider)
{
    return this;
}

您应该将DateTime投射到IConvertible

DateTime dt = new DateTime();
var result = ((IConvertible)dt).ToDateTime(val);

请参阅Explicit Interface Implementation (C# Programming Guide)