Принципы объектно-ориентированного программирования

         

Опрос типов



Опрос типов

Класс 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"); } }



Содержание раздела