2013-06-29 2 views
0

Decompiler изменен простой MessageBox код:MessageBox типа отливка INT

MessageBox.Show("msg"); 

Для этого:

int num = (int) MessageBox.Show("msg"); 

Оба отлично работает. Что означает этот тип каста?

+0

Показать (..) возвращает DialogResult и перечисление, а для этого - целое число –

ответ

1

От C# спецификации языка:

6.2.2 Явного перечислительные преобразования

Явные преобразования перечисления:

· Из sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double или decimal для любого типа enum.

· Из любого типа перечисления в sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double или decimal.

· От любого типа перечисления до любого другого перечисляемого типа.

В частности, ваш образец содержит явное преобразование от DialogResult до int. Но другие типы из приведенного выше списка также допускаются, независимо от типа перечисления.

0

MessageBox.Show() возвращает DialogResult значения, которое enum типа так что отливка возвращает вам базовый тип элементов перечисления (по умолчанию int) отданных в int

+1

«Это литье возвращает базовый тип элементов перечисления» - неправильно. Это кастинг возвращает 'int', потому что есть листинг для' int', а не потому, что основной тип перечисления - 'int'. Например, это тоже будет правильно: 'long num = (long) MessageBox.Show (" msg ")'. – Dennis

+0

Да, я понимаю, что плохой выбор слов. Спасибо за исправление. –