Ohjelmointi

Kuinka tehdä laiska alustus C #: ssä

Laiska alustus on tekniikka, joka lykkää objektin luomista ensimmäistä kertaa. Toisin sanoen objektin alustaminen tapahtuu vain pyynnöstä. Huomaa, että termit laiska alustus ja laiska välitön käyttö tarkoittavat samaa - niitä voidaan käyttää keskenään. Hyödyntämällä laiskaa alustusta voit parantaa sovelluksen suorituskykyä välttämällä tarpeetonta laskentaa ja muistin kulutusta. Tässä artikkelissa tarkastellaan, miten voimme suorittaa laiskan alustuksen C #: ssä.

Ymmärretään laiska lataus yksinkertaisella esimerkillä. Harkitse kahta luokkaa, Asiakas ja Tilaus. Asiakas luokka sisältää Tilaukset ominaisuus, joka puolestaan ​​viittaa kokoelmaan Tilaus luokassa. Tilaukset kokoelma voi sisältää suuren määrän tietoa ja saattaa tarvita jopa tietokantayhteyden yhteyden muodostamiseksi tietokantaan ja tietueiden hakemiseen. Tällöin ei ole mitään syytä ladata tietoja Tilaukset omaisuutta, kunnes tarvitsemme tietoja. Laiska alustus antaa meille mahdollisuuden ladata Tilaukset kerätä vain, kun tietoja pyydetään.

Lazy-luokan käyttäminen C #: ssä

Vaikka voit kirjoittaa oman mukautetun koodin laiskan alustuksen toteuttamiseksi, Microsoft suosittelee Laiska luokan sijaan. Laiska luokka Järjestelmä nimitila C #: ssä otettiin käyttöön osana .Net Framework 4.0: ta tarjoamaan langankestävä tapa toteuttaa laiska alustus. Voit hyödyntää tätä luokkaa lykätäksesi resurssiintensiivisten objektien alustamista sovelluksessasi.

Kun käytät Laiska luokassa, sinun on määritettävä tyypin objekti, jonka aiot luoda laiskasti tyyppi-argumentissa. Huomaa, että laiska alustus tapahtuu, kun avaat Laiska. Arvo omaisuus. Tässä on esimerkki siitä, miten Laiska luokkaa voidaan käyttää:

Laiska tilaukset = uusi Laiska();

ILukematon tulos = lazyOrders.Value;

Harkitse nyt kahta luokkaa, Kirjoittaja ja Blogi. Kirjoittaja voi kirjoittaa useita blogiviestejä, joten sinulla on yksi-moniin-suhde Kirjoittaja ja Blogi luokat alla olevan koodikatkelman mukaisesti.

public class Kirjoittaja

    {

julkinen int Id {get; aseta; }

julkinen merkkijono Etunimi {get; aseta; }

julkinen merkkijono Sukunimi {get; aseta; }

julkinen merkkijono Osoite {get; aseta; }

public List Blogs {get; aseta; }

    }

julkisen luokan blogi

    {

julkinen int Id {get; aseta; }

julkinen merkkijono Otsikko {get; aseta; }

public DateTime PublicationDate {get; aseta; }

    }

Huomaa, että Kirjoittaja ja Blogi luokkiin on esitetty a Lista ominaisuus (tyyppi Blogi) Kirjoittaja luokassa. Tämän ominaisuuden avulla Kirjoittaja luokassa voi olla kokoelma yhdestä tai useammasta Blogi luokassa.

Oletetaan, että meidän on näytettävä käyttöliittymässä vain tekijän tiedot (etunimi, sukunimi ja osoite). Tässä tapauksessa ei ole mitään syytä ladata blogin tietoja kirjoittajalle. haluamme ladata blogin yksityiskohdat laiskasti. Tässä on päivitetty Kirjoittaja luokka, joka vastaa tähän tarpeeseen. Huomaa Laiska luokassa.

public class Kirjoittaja

    {

julkinen int Id {get; aseta; }

julkinen merkkijono Etunimi {get; aseta; }

julkinen merkkijono Sukunimi {get; aseta; }

julkinen merkkijono Osoite {get; aseta; }

julkinen Laiska Blogit => uusi Laiska(() => GetBlogDetailsForAuthor (this.Id));

yksityinen IList GetBlogDetailsForAuthor (int Id)

        {

// Kirjoita koodi tähän saadaksesi kaikki kirjoittajan blogitiedot.

        }

    }

Lazy-luokan käyttäminen C #: ssä

Katsotaan nyt, kuinka voimme hyödyntää yleistä Laiska luokassa toteuttamaan Singletonin suunnittelumalli. (Voit lukea artikkelini Singletonin suunnittelumallista täältä.) Seuraava versio StateManager luokka on langankestävä. Samalla se osoittaa laiska alustus. Huomaa, että nimenomaista staattista konstruktoria on käytetty sen varmistamiseksi, että C # -kääntäjä ei merkitse tyyppiä nimellä ennen kenttää.

julkinen sinetöity luokan StateManager

    {

yksityinen StateManager ()

        {

        }

julkinen staattinen StateManager-instanssi

        {

saada

            {

paluu Nested.obj;

            }

        }

yksityisluokka Sisäkkäin

        {

staattinen sisäkkäin ()

            {

            }

sisäinen staattinen luettavissa vain StateManager obj = new StateManager ();

        }

    }

Tässä on laiska toteutus StateManager luokka, joka hyödyntää Laiska luokassa. Näet kuinka Laiska luokan ansiosta laiskuuden toteuttaminen on todella helppoa.

julkisen luokan StateManager

    {

staattinen staattinen luettavissa Lazy obj = new Lazy (() => new StateManager ());

yksityinen StateManager () {}

julkinen staattinen StateManager-instanssi

        {

saada

            {

return obj.arvo;

            }

        }

    }

Katsokaa Ilmentymä kiinteistö StateManager luokka edellä. Huomaa, että Arvo Yllä olevassa koodiesimerkissä näkyvä ominaisuus on vain luku -tilassa. Tästä syystä ei ole määritettyä käyttöoikeutta.

Laiska-alustus on erinomainen suorituskyvyn optimointitekniikka, jonka avulla voit lykätä huomattavasti suoritin- ja muistiresursseja kuluttavien objektien alustamista, kunnes tarvitset niitä ehdottomasti. Paranna sovellusten suorituskykyä hyödyntämällä laiska alustus.

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