Programavimas

Kaip dirbti su atspindžiu C #

Atspindėjimas C # naudojamas norint gauti tipų metaduomenis vykdymo metu. Kitaip tariant, galite naudoti atspindį, kad dinamiškai patikrintumėte savo programos tipų metaduomenis - galite gauti informacijos apie pakrautus rinkinius ir juose apibrėžtus tipus. Atspindėjimas C # yra panašus į C ++ RTTI (vykdymo laiko tipo informaciją).

Norėdami dirbti su „Net“ refleksija, į savo programą turėtumėte įtraukti „System.Reflection“ vardų sritį. Naudodamiesi atspindžiu, gausite „Type“ tipo objektus, kurie gali būti naudojami rinkiniams, tipams ar moduliams vaizduoti. Naudodamiesi atspindžiu, galite dinamiškai sukurti tipo egzempliorių ir netgi pasinaudoti tipo metodais.

„System.Reflection“ vardų srityje apibrėžtus tipus sudaro šie elementai.

  • Surinkimas
  • Modulis
  • Enum
  • „MethodInfo“
  • „ConstructorInfo“
  • „MemberInfo“
  • ParameterInfo
  • Tipas
  • „FieldInfo“
  • „EventInfo“
  • „PropertyInfo“

Dabar įsigilinkime į tam tikrą kodą, kad galėtume panaudoti apmąstymus. Apsvarstykite šią klasę, vadinamą Klientu.

viešosios klasės Klientas

    {

public int Id

        {

gauti; rinkinys;

        }

vieša eilutė Vardas

        {

gauti; rinkinys;

        }

vieša eilutė Pavardė

        {

gauti; rinkinys;

        }

viešoji eilutė Adresas

        {

gauti; rinkinys;

        }

    }

Šis kodo fragmentas rodo, kaip galite gauti klasės pavadinimą ir klientų klasės vardų srities pavadinimą naudodamiesi atspindžiu:

Tipo tipas = Tipas (Klientas);

Console.WriteLine ("Class:" + type.Name);

Console.WriteLine ("Vardų sritis:" + type.Namespace);

Šis kodo fragmentas parodo, kaip galite gauti klientų klasės ypatybių sąrašą ir rodyti jų pavadinimus konsolės lange:

static void Main (string [] args)

        {

Tipo tipas = Tipas (Klientas);

PropertyInfo [] propertyInfo = type.GetProperties ();

Console.WriteLine ("Klientų klasės ypatybių sąrašas yra: -");

foreach („PropertyInfo pInfo in propertyInfo“)

            {

Console.WriteLine (pInfo.Name);

            }

        }

Tipo klasės „GetProperties“ () metodas pateikia „PropertyInfo“ tipo masyvą - tai iš tikrųjų yra jūsų tipo viešųjų ypatybių sąrašas. Tada galite pakartoti šį masyvą ir gauti kiekvienos viešosios nuosavybės, apibrėžtos jūsų tipe, pavadinimus. Kadangi klientų klasė apibrėžia tris ypatybes, visų šių trijų ypatybių pavadinimai bus rodomi konsolėje, kai bus vykdoma ši programa.

Štai kaip mes galime parodyti konstruktorių metaduomenis ir viešus tipo metodus, naudojant atspindį. Dar kartą apžvelkime anksčiau sukurtą klientų klasę ir įtraukime du metodus - numatytąjį konstruktorių ir metodą pavadinimu „Patvirtinti“, kurie naudojami patvirtinant kliento objektą, jam perduotą kaip parametrą. Taip atrodytų modifikuota „Klientų“ versija.

viešosios klasės Klientas

    {

viešasis klientas ()

        {

// Numatytasis konstruktorius

        }

public int Id

        {

gauti; rinkinys;

        }

vieša eilutė Vardas

        {

gauti; rinkinys;

        }

vieša eilutė Pavardė

        {

gauti; rinkinys;

        }

viešoji eilutė Adresas

        {

gauti; rinkinys;

        }

public bool Patvirtinti (kliento customerObj)

        {

// Kodas kliento objektui patvirtinti

grįžti tiesa;

        }

    }

Šį kodo fragmentą galima naudoti visų konstruktorių, priklausančių klientų klasei, vardams rodyti. Klientų klasėje turime tik vieną konstruktorių - taigi, bus pateiktas tik vienas.

Tipo tipas = Tipas (Klientas);

ConstructorInfo [] constructorInfo = type.GetConstructors ();

Console.WriteLine ("Klientų klasėje yra šie konstruktoriai: -");

foreach („ConstructorInfo c“ in constructorInfo)

  {

Console.WriteLine (c);

  }

Atminkite, kad „Type“ klasės „GetConstructors“ () metodas pateikia ConstructorInfo tipo masyvą, kuriame yra visų viešųjų konstruktorių, apibrėžtų pagal atspindimą tipą, sąrašas.

GERAI; dabar parodysime visų viešų klientų klasės metodų pavadinimus - vėlgi, mes tiesiog turime vieną, taigi, vykdant kitą pateiktą programą, konsolėje bus rodomas tik vieno metodo pavadinimas. Štai jūsų nuorodų kodų sąrašas.

static void Main (string [] args)

 {

Tipo tipas = Tipas (Klientas);

MethodInfo [] methodInfo = type.GetMethods ();

  Console.WriteLine ("Kliento klasės metodai yra: -");

foreach („MethodInfo“ temp. „methodInfo“)

            {

Console.WriteLine (temp.Name);

            }

Pultas.Skaitykite ();

        }

Atminkite, kad taip pat galite gauti kelių papildomų metodų pavadinimus („ToString“, „Equals“, „GetHashCode“, „GetType“). Šie metodai yra paveldėti iš „Object“ klasės - bet kuri „Net“ klasė pagal numatytuosius nustatymus išveda „Object“ klasę.

Taip pat galite kartoti metodo atributus. Jei jūsų metodams buvo nustatyti pasirinktiniai atributai, metodo atributams nuskaityti galite naudoti metodą GetCustomAttributes, esantį MethodInfo klasės egzemplioriuje. Štai kaip galite tai pasiekti.

foreach („MethodInfo“ temp. „methodInfo“)

 {

foreach (atributo atributas temp.GetCustomAttributes (true))

     {

// Čia parašykite įprastą kodą

     }

  }

Taigi, jei savo verslo objektus dekoruojate naudodami atributus savo programoje, galite pasinaudoti apmąstymais, kad apmąstytumėte tipą, gautumėte savo tipo metodų atributus ir atitinkamai atliktumėte tam tikrus veiksmus.

$config[zx-auto] not found$config[zx-overlay] not found