Täydet ominaisuudet taustakentillä
Lisätkää logiikkaa get- ja set-määritteisiin.
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);
}
}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
- Automaattisesti toteutetut ominaisuudet
- Täydet ominaisuudet taustakentillä
- Lausekepohjaiset jäsenet
- Indekserit