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

Lia*_*ath 4 .net c# interface

这是我试过的这个问题的后续内容,在我的回答中没有解释.

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

IConvertible dt = new DateTime();
Run Code Online (Sandbox Code Playgroud)

编译没有问题.

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

IConvertible dt = new DateTime();
dt.ToDateTime(val);
Run Code Online (Sandbox Code Playgroud)

但是,如果您编写下一个代码片段,则无法编译

DateTime dt = new DateTime();
dt.ToDateTime(val);
Run Code Online (Sandbox Code Playgroud)

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

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

Ser*_*kiy 11

因为显式DateTime实现IConvertible接口 - 此方法在MSDN上的显式接口实现部分中列出.以下是它的实现方式:

DateTime IConvertible.ToDateTime(IFormatProvider provider)
{
    return this;
}
Run Code Online (Sandbox Code Playgroud)

你应该施展DateTimeIConvertible:

DateTime dt = new DateTime();
var result = ((IConvertible)dt).ToDateTime(val);
Run Code Online (Sandbox Code Playgroud)

请参阅显式接口实现(C#编程指南)