Почему базовые типы.Net Framework не содержат реализации методов IConvertible?
Базовые типы.Net Framework, такие как Int32, Int64, Boolean и т. Д. реализовать интерфейс IConvertible, но метаданные этих типов не содержат реализации методов, определенных в интерфейсе IConvertible, таких как ToByte, ToBoolean и т. д.
Я пытаюсь понять, почему базовые типы не имеют реализации метода, хотя они реализуют интерфейс IConvertible. Может ли кто-нибудь помочь в этом?
2 ответа
Присмотритесь к документации - Int32
инвентарь IConvertible
явно.
Когда класс / структура реализует интерфейс явно, вы должны привести экземпляры этого типа к его интерфейсу перед вызовом этих методов
var asConvertable = (IConvertible) 3; //boxing
var someByte = asConvertible.ToByte();
Int32
и другие примитивные типы реализуют IConvertible
интерфейс явно. Явная реализация интерфейса означает, что метод не отображается в открытых методах конкретного типа: вы не можете вызывать его напрямую, вам нужно сначала привести к интерфейсу.
int x = 42;
IConvertible c = (IConvertible)x;
byte b = c.ToByte();
Чтобы реализовать интерфейс явно, вы не указываете уровень доступности, а перед именем метода добавляется имя интерфейса:
byte IConvertible.ToByte()
{
...
}
Чтобы получить доступ к методу с помощью отражения, вы должны указать полное имя интерфейса:
MethodInfo toByte =
typeof(int).GetMethod("System.IConvertible.ToByte",
BindingFlags.Instance | BindingFlags.NonPublic);