Учитывая этот класс с неявным оператором приведения:
public class MyDateTime
{
public static implicit operator MyDateTime(System.Int64 encoded)
{
return new MyDateTime(encoded);
}
public MyDateTime(System.Int64 encoded)
{
_encoded = encoded;
}
System.Int64 _encoded;
}
Теперь я могу сделать следующее:
long a = 5;
MyDateTime b = a;
Но НЕ следующее:
long f = 5;
object g = f;
MyDateTime h = g;
Это дает время компиляции:
Невозможно неявно преобразовать тип 'object' в 'MyDateTime'.
Имеет смысл для меня.
Теперь яизмените предыдущий пример следующим образом:
long f = 5;
object g = f;
MyDateTime h = (MyDateTime)g;
Компилируется нормально.Теперь я получаю время выполнения InvalidCastException
:
Невозможно привести объект типа 'System.Int64' к типу MyDateTime '.
Это говорит мне о том, что C # неявное приведениеоператоры применяются только во время компиляции и не применяются, когда среда выполнения .NET пытается динамически привести объект к другому типу.
Мои вопросы:
- Я прав?
- Есть ли другой способ сделать это?
Кстати, полное приложение состоит в том, что я использую Delegate.DynamicInvoke()
для вызова функции, которая принимает MyDateTime
параметр, и тип аргумента, который я передаю DynamicInvoke
, является длинным.