Ugrás a fő tartalomhoz

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