Console.WriteLine("Is type abstract? {0}", t.IsAbstract); // Абстрактный?
Console.WriteLine("Is type sealed? {0}", t.IsSealed); // Запечатанный?
Console.WriteLine("Is type generic? {0}", t.IsGenericTypeDefinition); // Обобщенный?
Console.WriteLine("Is type a class type? {0}", t.IsClass); // Тип класса?
Console.WriteLine();
}
Добавление операторов верхнего уровня
Операторы верхнего уровня в файле Program.cs
Туре.GetType(), а результирующий объект System.Туре отправляется каждому вспомогательному методу. Процесс повторяется до тех пор, пока пользователь не введет Q для прекращения работы приложения.Console.WriteLine("***** Welcome to MyTypeViewer *****");
string typeName = "";
do
{
Console.WriteLine("\nEnter a type name to evaluate");
// Пригласить ввести имя типа.
Console.Write("or enter Q to quit: "); // или Q для завершения
// Получить имя типа
typeName = Console.ReadLine();
// Пользователь желает завершить программу?
if (typeName.Equals("Q",StringComparison.OrdinalIgnoreCase))
{
break;
}
// Попробовать отобразить информацию о типе.
try
{
Type t = Type.GetType(typeName);
Console.WriteLine("");
ListVariousStats(t);
ListFields(t);
ListProps(t);
ListMethods(t);
ListInterfaces(t);
}
catch
{
Console.WriteLine("Sorry, can't find type");
}
} while (true);
В настоящий момент приложение MyTypeViewer.exe
Туре.GetType() требует строковых имен с учетом регистра):• System.Int32
• System.Collections.ArrayList
• System.Threading.Thread
• System.Void
• System.10.BinaryWriter
• System.Math
• MyTypeViewer.Program
Ниже показан частичный вывод при указании System.Math
***** Welcome to MyTypeViewer *****
Enter a type name to evaluate
or enter Q to quit: System.Math
***** Various Statistics *****
Base class is: System.Object
Is type abstract? True
Is type sealed? True
Is type generic? False
Is type a class type? True
***** Fields *****
->PI
->E
***** Properties *****
***** Methods *****
->Acos
->Asin
->Atan
->Atan2
->Ceiling
->Cos
...
Рефлексия статических типов
Если вы введете System.Console
t будет null. Статические типы не могут загружаться с помощью метода Туре.GetType(typeName). Взамен придется использовать другой механизм — функцию typeof из System.Туре. Модифицируйте программу для обработки особого случая System.Console:Type t = Type.GetType(typeName);
if (t == null && typeName.Equals("System.Console",
StringComparison.OrdinalIgnoreCase))
{
t = typeof(System.Console);
}
Рефлексия обобщенных типов
При вызове Type.GetType()
'), за которым следует числовое значение, представляющее количество поддерживаемых параметров типа. Например, чтобы вывести описание метаданных System.Collections.Generic.List, приложению потребуется передать следующую строку:System.Collections.Generic.List`1