ZH1 segítség
propertyk
// c# specifikus property
public string Mezo { get { ... } set { ... } }
// klasszikus property (metódusos)
public string GetMezo() { ... }
public void SetMezo(string value) { ... }
// csak olvasható property / számított property
public string Nev { get { ... } }
ellenőrzések
// string nem lehet null vagy üres
if (string.IsNullOrEmpty(value))
throw new Exception("A property értéke nem megfelelő!");
// intervallum ellenőrzés [10; 70)
if (value < 10 || value >= 70)
throw new Exception("A property értéke nem megfelelő!");
// oszthatóság ellenőrzés pl. 5-tel osztható kell legyen
if (value % 5 != 0)
throw new Exception("A property értéke nem megfelelő!");
regex:
[]között tudjuk felsorolni a lehetséges karaktereket pl.[a-z], 1-1 külön karaktert is fel lehet sorolni pl.[abc]@"^[a-z]"első karakter@"^[a-z][0-9/]*"első karakter + bármennyi karakter utána@"^[a-z][0-9/]*[A-Z]$"első karakter + bármennyi karakter utána + utolsó karakter
első karakter számokat tartalmazhat, az egész számok és betűk az utolsó pedig csak betűk lehetnek pl.
if (!Regex.IsMatch(value, @"^[0-9][aA-zZ0-9]*[aA-zZ]$"))
throw new Exception("A property értéke nem megfelelő!");
elég csak a property szignatúra
public string Mezo { get; set; }
értéke csak egyszer adható meg
private string mezo;
private bool beallitva = false;
public string Mezo
{
get { return mezo; }
set
{
if (beallitva)
throw new Exception("A property értéke már be lett állítva!");
beallitva = true;
mezo = value;
}
}
védelmi szintek
- public: bárhonnan elérhető
- protected: csak az osztályból és az örökölt osztályokból elérhető
- private: csak az osztályból elérhető
kívülről nem módosítható: protected set
public int Mezo { get { ... } protected set { ... } }
osztályon kívülről nem módosítható: private set
public int Mezo { get { ... } private set { ... } }
konstruktorok
public OsztalyNeve(string mezo, string mezo2)
{
Mezo = mezo; // a Mezo itt a propertyre mutat
Mezo2 = mezo2;
}
előző konstruktor meghívása
public OsztalyNeve(string mezo) : this(mezo, "statikus ertek")
{ }
ős konstruktor meghívása
public GyerekOsztalyNeve(string mezo, string mezo2, int mezo3) : base(mezo, mezo2)
{
Mezo3 = mezo3;
}
metódus felülírások
késői kötés alkalmazása
public virtual int Valami() { ... }
felülírás
public override int Valami() { ... }
ToString() metódus felülírása
public override string ToString() { return $"{adatok felsorolása}"; }
Equals() metódus felülírása
egysoros megoldás
public override bool Equals(object obj)
{
return obj is not null && obj is OsztalyNeve masik && this.PropertyNeve == masik.PropertyNeve;
}
többsoros megoldás
public override bool Equals(object obj)
{
if (obj is null) return false;
if (obj is not OsztalyNeve) return false; // vagy !(obj is Osztalyneve)
OsztalyNeve masik = obj as OsztalyNeve; // vagy (OsztalyNeve)obj;
if (this.PropertyNeve == masik.PropertyNeve) return true;
return false;
}
konténer osztály
ha már szerepel a listában
if (lista.Contains(ujElem)) { throw new Exception("Ez az elem már szerepel a listában!"); }
indexer (indexer tab+tab)
public Osztalyneve this[string keresettMezo]
{
get
{
foreach (OsztalyNeve peldany in lista)
{
if (peldany.Mezo == keresettMezo) return peldany;
}
throw new Exception("Nincs ilyen elem a listában!");
}
}
indexer használata
kontenerOsztalyPeldany[keresettMezo];
Extra
Figyelem!
Az alábbiakban felsorolt gyorsítások Visual Studio-ban működnek, de más editorban is találhatóak hasonló shortcutok.
- switch case automatikus kitöltése enum esetekkel -> switch -> tab+tab -> property név beírása -> lefelé nyíl
- billentyűzet shortcutok:
- ctrl + d -> sor duplikálás
- alt + up/down -> sor mozgatás fel/le
- ctrl + x -> sor kivágás
- c# shortcutok:
- propfull, prop, indexer, ctor
- generate constructor