Поиск

Опрос типов

Класс System. Type также позволяет запрашивать практически все атрибуты типа, включая модификатор доступа, является ли тип вложенным, его СОМ-свойства и т. д. Взгляните на этот код, использующий несколько обычных и демонстрационных типов:

using System;
using System.Reflection;
interface Demolnterface
{
}
class DemoAttr : System.Attribute
{
>
enum DemoEnum
{
>
public class DemoBaseClass
{
}
public class DemoDerivedClass : DemoBaseClass
< }
class DemoStruct
{
}
class QueryTypesApp {
public static void QueryType(string typeName)
{
try
{
Type type = Type.GetType(typeName);
Console.Writel_ine("Type name: {0}", type.FullName);
Console. Writel_ine( "\tHasElementType = {0}",
type.HasElementType);
Console.Writel_ine("\tIsAbstract = {0}", type.IsAbstract);
Console.WriteLine("\tIsAnsiClass = {0}",
type.IsAnsiClass);
Console.WriteLine("\tIsArray = {0}", type.IsArray);
Console.WriteLine("\tIsAutoClass = {0}",
type.IsAutoClass); Console.WriteLine("\tIsAutoLayout = {0}",
type.IsAutoLayout);
Console.WriteLine("\tIsByRef = {0}", type.IsByRef);
Console.WriteLine("\tIsClass = {0}", type.IsClass);
Console.WriteLine("\tIsCOMObject = {0}",
type.IsCOMObject); Console.WriteLine("\tIsContextful = {0}",
type.IsContextful);
Console.WriteLine("\tIsEnum = {0}", type.IsEnum);
Console.WriteLine("\tIsExplicitLayout = {0}",
type.IsExplicit Layout);
Console.WriteLine("\tlslmport = {0}", type.lslmport);
Console.WriteLine("\tlslnterface = {0}",
type.lslnterface); Console.WriteLine("\tIsLayoutSequential = {0}",
type.IsLayoutSequential); Console.WriteLine("\tIsMarshalByRef = {0}",
type.IsMarshalByRef); Console.WriteLine("\tIsNestedAssembly = {0}",
type.IsNestedAssembly); Console.WriteLine("\tIsNestedFamANDAssem = {0}",
type.IsNestedFamANDAssem); Console.WriteLine("\tIsNestedFamily = {0}",
type.IsNestedFamily); Console.WriteLine("\tIsNestedFamORAssera = {0}",
type.IsNestedFamORAssem); Console.WriteLine("\tIsNestedPrivate = {0}",
type.IsNestedPrivate); Console.WriteLine("\tIsNestedPublic = {0}",
type.IsNestedPublic); Console.WriteLine("\tIsNotPublic = {0}",
type.IsNotPublic); Console.WriteLine("\tIsPointer = {0}",
type.IsPointer); Console.WriteLine("\tIsPrimitive = {Q}",
type.IsPrimitive); Console.WriteLine("\tIsPublic = {O}",
type.IsPublic); Console.WriteLine("\tIsSealed = {0}",
type.IsSealed); Console.WriteLine("\tIsSeriallzable = {0}",
type.IsSerializable); Console.WriteLine("\tIsServicedComponent = {0}",
type.IsServicedComponent); Console.WriteLine("\tIsSpecialName = {0}",
type.IsSpecialName); Console.WriteLine("\tIsUnicodeClass = {0}",
type.IsUnicodeClass); Console.WriteLine("\tIsValueType = {0}",
type.IsValueType); }
catch(System.NullReferenceException) {
Console.WriteLine
("{0} is not a valid type", typeName); } }
public static void Main(string[] args) <
Que ryType("System.Int32");
QueryType("System.Int64");
QueryType("System.Type");
QueryTypeC'DemoAttr"); QueryType("DemoEnum");
QueryType("DemoBaseClass"); Que
ryType("DemoDe rivedClass"); QueryTypeC'DemoStruct"); } }