2014-01-23 4 views
5

Это продолжение для this question, которое я пробовал и не смог объяснить в своем ответе.Почему DateTime.ToDateTime() не компилируется?

DateTime реализует IConvertible. Вы можете это доказать, потому что

IConvertible dt = new DateTime(); 

компилируется без проблем.

Вы можете написать следующий код и нет никаких ошибок компиляции

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

Однако, если вы пишете следующий фрагмент кода не компилировать

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

«System.DateTime» не содержит определения для «ToDateTime»

Если DateTime im интерфейс, почему вы не можете вызывать метод в DateTime, если он не будет передан IConvertible?

ответ

11

Потому что DateTime реализует интерфейс IConvertible явно - этот метод указан в разделе Explicit Interface Implementations на MSDN. И вот как это реализовано:

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)

+1

Спасибо, что происходит в моем списке чтения! – Liath

Смежные вопросы