Есть ли способ сделать динамическое неявное приведение типов в C #?
Учитывая этот класс с неявным оператором приведения:
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;
Это дает время компиляции:
Не могу неявно преобразовать типобъект» кMyDateTime.
Имеет смысл для меня.
Теперь я модифицирую предыдущий пример следующим образом:
long f = 5;
object g = f;
MyDateTime h = (MyDateTime)g;
Это хорошо компилируется. Теперь я получаю время выполнения:InvalidCastException
Невозможно привести объект типа 'System.Int64' набрать MyDateTime '.
Это говорит мне о том, что неявные операторы приведения в C # применяются только во время компиляции и не применяются, когда среда выполнения .NET пытается динамически привести объект к другому типу.
Мои вопросы:
Я прав?Есть ли другой способ сделать это?Кстати, полное заявление о том, что ям используюDelegate.DynamicInvoke()
вызвать функцию, которая принимаетMyDateTime
параметр и тип аргумента I 'м, переходящий кDynamicInvoke
это долго.