Programmering

Sådan bruges anonyme typer i C #

En anonym type er en type, der ikke har noget navn. Du kan bruge en anonym type til at indkapsle et sæt skrivebeskyttede egenskaber i en enkelt enhed - og du behøver ikke at definere den anonyme type på forhånd. Denne artikel diskuterer, hvad anonyme typer er, hvorfor de er vigtige, og hvordan vi kan arbejde med anonyme typer i C #.

For at arbejde med kodeeksemplerne i denne artikel skal du have Visual Studio 2019 installeret i dit system. Hvis du ikke allerede har en kopi, kan du downloade Visual Studio 2019 her.

Opret et konsolapplikationsprojekt i Visual Studio

Lad os først oprette et .NET Core-konsolapplikationsprojekt i Visual Studio. Forudsat at Visual Studio 2019 er installeret i dit system, skal du følge nedenstående trin for at oprette et nyt .NET Core-konsolapplikationsprojekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klik på "Opret nyt projekt."
  3. I vinduet "Opret nyt projekt" skal du vælge "Konsolapp (.NET Core)" fra listen over skabeloner, der vises.
  4. Klik på Næste.
  5. I vinduet "Konfigurer dit nye projekt", der vises nedenfor, skal du angive navnet og placeringen for det nye projekt.
  6. Klik på Opret.

Dette opretter et nyt .NET Core-konsolapplikationsprojekt i Visual Studio 2019. Vi bruger dette projekt i de efterfølgende afsnit i denne artikel for at illustrere, hvordan vi kan arbejde med anonyme typer i C #.

Forstå anonyme typer i C #

I det væsentlige er en anonym type en referencetype og kan defineres ved hjælp af var-nøgleordet. Du kan have en eller flere egenskaber i en anonym type, men alle er skrivebeskyttede. I modsætning til en C #-klasse kan en anonym type ikke have et felt eller en metode - den kan kun have egenskaber.

Du kan få adgang til en anonym type eller dens egenskaber inden for metoden, hvor den anonyme type er defineret. Med andre ord er tilgængeligheden af ​​en anonym type begrænset til det omfang, hvor den er defineret.

Brug en anonym type i C #

Lad os nu grave i noget kode. Overvej følgende anonyme type.

var forfatter = ny

{

FirstName = "Joydip",

LastName = "Kanjilal",

Adresse = "Hyderabad, INDIEN"

};

I det foregående kodestykke er forfatteren navnet på en forekomst af en anonym type oprettet ved hjælp af det nye søgeord. (Navnet på selve den anonyme type kendes kun af kompilatoren.) Denne anonyme type indeholder tre egenskaber, nemlig fornavn, efternavn og adresse. Alle disse egenskaber er af strengtypen. Bemærk, at når du arbejder med en anonym type, behøver du ikke angive typen af ​​en ejendom, før du initialiserer den.

Du kan bruge følgende kodestykke til at få adgang til alle tre egenskaber af den ovennævnte anonyme type.

Console.WriteLine ("Navn: {0} {1}", author.FirstName, author.LastName);

Console.WriteLine ("Adresse: {0}", forfatter.Adresse);

Brug en indlejret anonym type i C #

Anonyme typer kan også være indlejrede. Det vil sige, du kan have en anonym type som en ejendom inden for en anden anonym type. Her er et eksempel, der illustrerer dette.

var forfatter = ny

{

FirstName = "Joydip",

LastName = "Kanjilal",

Adresse = ny {City = "Hyderabad", land = "INDIEN"}

};

Du kan få adgang til egenskaberne for denne indlejrede anonyme type som vist i kodestykket nedenfor.

Console.WriteLine ("Navn: {0} {1}", author.FirstName, author.LastName);

Console.WriteLine ("Adresse: {0}", forfatter.Address.City);

Det komplette program er angivet nedenfor til din reference.

statisk ugyldigt Main (streng [] args)

{

var forfatter = ny

  {

FirstName = "Joydip",

LastName = "Kanjilal",

Adresse = ny {City = "Hyderabad", land = "INDIEN"}

  };

Console.WriteLine ("Navn: {0} {1}", author.FirstName, author.LastName);

Console.WriteLine ("Adresse: {0}", forfatter.Address.City);

Console.Read ();

}

Brug anonyme typer med LINQ

Select-klausulen i LINQ opretter og returnerer en anonym type som et resultat. Følgende kodestykke illustrerer dette.

Overvej følgende klasse ved navn Forfatter.

offentlig klasse Forfatter

{

public int Id {get; sæt; }

offentlig streng Fornavn {get; sæt; }

public string LastName {get; sæt; }

}

Følgende kodestykke viser, hvordan du kan oprette en forfatterliste.

IListiske forfattere =

ny liste ()

{

ny forfatter () {Id = 1, FirstName = "John", LastName = "Willey"},

ny forfatter () {Id = 2, FirstName = "Steve", LastName = "Smith"},

ny forfatter () {Id = 3, FirstName = "Bill", LastName = "Ruffner"},

ny forfatter () {Id = 4, FirstName = "Joydip", LastName = "Kanjilal"}

};

Og det næste kodestykke viser, hvordan du kan udnytte Select-klausulen i LINQ sammen med en anonym type for at returnere resultatet ved udførelse af en forespørgsel.

var resultat = fra a i forfattere vælg nyt

{

Id = a.Id,

Navn = a.FirstName + "\ t" + a.LastName

};

Du kan nu vise forfatterens id'er og navne i konsolvinduet som vist i kodestykket nedenfor.

foreach (var data i resultat)

Console.WriteLine (data.Name);

Det komplette program er angivet nedenfor til din reference.

offentlig klasse Forfatter

    {

public int Id {get; sæt; }

offentlig streng Fornavn {get; sæt; }

public string LastName {get; sæt; }

    }

klasse Program

    {

statisk ugyldigt Main (streng [] args)

        {

IListiske forfattere = ny liste () {

ny forfatter () {Id = 1, FirstName = "John",

LastName = "Willey"},

ny forfatter () {Id = 2, FirstName = "Steve",

LastName = "Smith"},

ny forfatter () {Id = 3, FirstName = "Bill",

LastName = "Ruffner"},

ny forfatter () {Id = 4, FirstName = "Joydip",

LastName = "Kanjilal"}

                };

var resultat = fra a i forfattere

vælg nyt

                         {

Id = a.Id,

Navn = a.FirstName + "\ t" + a.LastName

                         };

foreach (var data i resultat)

Console.WriteLine (data.Name);

Console.Read ();

        }

    }

Anonyme typer giver dig mulighed for at oprette en type og instantiere den hurtigt uden at skulle erklære typen tidligere. Fra CLR's synspunkt er en anonym type bare en anden referencetype. Compileren giver et navn til hver anonyme type under omslaget.

Anonyme typer stammer fra objektklassen. Dette er grunden til, at du kun kan caste en anonym type til en forekomst af objekttype. Bemærk også, at returtypen for en metode, en ejendom, en begivenhed, en delegeret osv. Ikke kan være en anonym type.

Sådan gør du mere i C #:

  • Hvornår skal man bruge en abstrakt klasse vs. interface i C #
  • Sådan arbejder du med AutoMapper i C #
  • Sådan bruges lambda-udtryk i C #
  • Sådan arbejder du med Action-, Func- og Predicate-delegerede i C #
  • Sådan bruges Dapper ORM i C #
  • Sådan implementeres en simpel logger i C #
  • Sådan arbejder du med log4net i C #
  • Sådan arbejder du med delegerede i C #
  • Sådan arbejder du med attributter i C #
  • Sådan bruges designmønsteret med flyvægt i C #
  • Sådan implementeres depotdesignmønsteret i C #
  • Udforskning af virtuelle og abstrakte metoder i C #
  • Sådan arbejder du med refleksion i C #
  • Sådan arbejder du med filsystemwatcher i C #