C# Academy · Oppitunti

Täydet ominaisuudet taustakentillä

Lisätkää logiikkaa get- ja set-määritteisiin.

Oppitunti 2/413 vaihetta

Täydet ominaisuudet taustakentillä on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.

Automaattisia ominaisuuksia pidemmälle

Kun tarvitset logiikkaa get- tai set-määritteeseen, kirjoita täysi ominaisuus, jolla on erikseen määritelty taustakenttä. Kenttä tallentaa tiedot, ja käyttöoikeusmääritteet hallitsevat niiden käyttöä.

using System;

class Temperature
{
    private double _celsius;

    public double Celsius
    {
        get { return _celsius; }
        set { _celsius = value; }
    }
}

class Program
{
    static void Main()
    {
        var t = new Temperature();
        t.Celsius = 21.5;
        Console.WriteLine(t.Celsius);
    }
}

Taustakentän nimeämiskäytäntö

Yleisen käytännön mukaan taustakenttä on private, ja sen nimen alussa on alaviiva, esimerkiksi _name. Julkinen ominaisuus tarjoaa pääsyn siihen.

using System;

class Person
{
    private string _name;

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }
}

class Program
{
    static void Main()
    {
        var p = new Person();
        p.Name = "Grace";
        Console.WriteLine(p.Name);
    }
}

value-avainsana

set-määritteen sisällä implisiittinen parametri value sisältää asetettavan arvon. Sinä päätät, mitä sille tehdään.

using System;

class Box
{
    private int _size;

    public int Size
    {
        get { return _size; }
        set { _size = value * 2; }
    }
}

class Program
{
    static void Main()
    {
        var box = new Box();
        box.Size = 10;
        Console.WriteLine("Stored size: " + box.Size);
    }
}

Setterin validointi

Täyden ominaisuuden yleinen käyttötarkoitus on validoida syöte ennen sen tallentamista ja heittää poikkeus, jos arvo ei kelpaa.

using System;

class Account
{
    private decimal _balance;

    public decimal Balance
    {
        get { return _balance; }
        set
        {
            if (value < 0)
                throw new ArgumentException("Balance cannot be negative");
            _balance = value;
        }
    }
}

class Program
{
    static void Main()
    {
        var a = new Account();
        a.Balance = 500m;
        Console.WriteLine("Balance: " + a.Balance);
    }
}

Lasketut (vain luku) -ominaisuudet

Pelkkää get-määritettä käyttävä ominaisuus voi laskea arvonsa muiden kenttien perusteella. Taustakenttää ei tarvita, koska mitään ei tallenneta.

using System;

class Rectangle
{
    private double _width;
    private double _height;

    public Rectangle(double w, double h)
    {
        _width = w;
        _height = h;
    }

    public double Area
    {
        get { return _width * _height; }
    }
}

class Program
{
    static void Main()
    {
        var r = new Rectangle(4, 5);
        Console.WriteLine("Area: " + r.Area);
    }
}

Setterien sivuvaikutukset

Setter voi tehdä muutakin kuin tallentaa arvon: se voi normalisoida syötteen, päivittää siihen liittyvän tilan tai kirjata muutokset lokiin.

using System;

class User
{
    private string _email;

    public string Email
    {
        get { return _email; }
        set { _email = value.Trim().ToLower(); }
    }
}

class Program
{
    static void Main()
    {
        var u = new User();
        u.Email = "  Hello@Example.COM  ";
        Console.WriteLine("Normalized: " + u.Email);
    }
}

Laiska laskenta getterissä

Getter voi tallentaa raskaan laskutoimituksen tuloksen taustakenttään ensimmäisellä pyytämiskerralla.

using System;

class Report
{
    private string _cached;

    public string Content
    {
        get
        {
            if (_cached == null)
                _cached = "Generated at runtime";
            return _cached;
        }
    }
}

class Program
{
    static void Main()
    {
        var r = new Report();
        Console.WriteLine(r.Content);
        Console.WriteLine(r.Content);
    }
}

Virheellisen tilan estäminen

Yhdistä taustakenttä ja logiikka, jotta olio pysyy aina kelvollisessa tilassa. Tässä setter rajoittaa arvon tietylle välille.

using System;

class Volume
{
    private int _level;

    public int Level
    {
        get { return _level; }
        set
        {
            if (value < 0) _level = 0;
            else if (value > 100) _level = 100;
            else _level = value;
        }
    }
}

class Program
{
    static void Main()
    {
        var v = new Volume();
        v.Level = 150;
        Console.WriteLine("Clamped: " + v.Level);
    }
}

Tallennettujen ja laskettujen ominaisuuksien yhdistäminen

Luokassa yhdistetään usein tallennettuja ominaisuuksia (joilla on taustakentät) ja niistä johdettuja vain luku -muotoisia laskettuja ominaisuuksia.

using System;

class Employee
{
    private string _first;
    private string _last;

    public string First { get { return _first; } set { _first = value; } }
    public string Last { get { return _last; } set { _last = value; } }
    public string FullName { get { return _first + " " + _last; } }
}

class Program
{
    static void Main()
    {
        var e = new Employee { First = "Marie", Last = "Curie" };
        Console.WriteLine(e.FullName);
    }
}

Muutosilmoitusten lähettäminen

Setterit ovat luonteva paikka ilmoittaa tietojen muuttumisesta. Tätä mallia käytetään paljon käyttöliittymäkehyksissä.

using System;

class Model
{
    private int _count;

    public int Count
    {
        get { return _count; }
        set
        {
            if (_count != value)
            {
                _count = value;
                Console.WriteLine("Count changed to " + _count);
            }
        }
    }
}

class Program
{
    static void Main()
    {
        var m = new Model();
        m.Count = 1;
        m.Count = 1;
        m.Count = 2;
    }
}

Yhdistetään kaikki

Täysien ominaisuuksien avulla luokka voi ylläpitää eheysvaatimuksia ja tarjota johdettuja tietoja selkeän, kentän kaltaisen rajapinnan kautta.

using System;

class Thermostat
{
    private double _target;

    public double Target
    {
        get { return _target; }
        set { _target = value < 10 ? 10 : value; }
    }

    public string Status { get { return _target >= 22 ? "Warm" : "Cool"; } }
}

class Program
{
    static void Main()
    {
        var th = new Thermostat();
        th.Target = 5;
        Console.WriteLine(th.Target + " -> " + th.Status);
        th.Target = 24;
        Console.WriteLine(th.Target + " -> " + th.Status);
    }
}

Pikatarkistus

Testaa, miten hyvin ymmärrät täysiä ominaisuuksia.

Kertaus

Täysi ominaisuus yhdistää yksityisen taustakentän ja erikseen määritellyt get/set-käyttöoikeusmääritteet, joten voit lisätä validointia, normalisointia, välimuistia tai muutosilmoituksia. Vain luku -muotoisilla lasketuilla ominaisuuksilla on ainoastaan getter eikä taustakenttää. value-avainsana sisältää setterissä asetettavan arvon.

using System;

class Demo
{
    private int _n;
    public int N
    {
        get { return _n; }
        set { _n = value < 0 ? 0 : value; }
    }
    public int Doubled { get { return _n * 2; } }
}

class Program
{
    static void Main()
    {
        var d = new Demo();
        d.N = -5;
        Console.WriteLine(d.N + ", " + d.Doubled);
    }
}
Aloita maksutta

Opi C# tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
93
Oppitunnit
346

Usein kysytyt kysymykset

Onko oppitunti ”Täydet ominaisuudet taustakentillä” ilmainen?

Kyllä – oppitunnin ”Täydet ominaisuudet taustakentillä” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Täydet ominaisuudet taustakentillä”?

Lisätkää logiikkaa get- ja set-määritteisiin. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Täydet ominaisuudet taustakentillä”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?

Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Automaattisesti toteutetut ominaisuudet
  2. Täydet ominaisuudet taustakentillä
  3. Lausekepohjaiset jäsenet
  4. Indekserit
← Takaisin: C# Academy