Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
S Sample_Solutions
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OOP
  • Sample_Solutions
  • Wiki
  • Cv5

Cv5 · Changes

Page history
Create Cv5 authored Oct 22, 2019 by Ing. Lukáš Hruška's avatar Ing. Lukáš Hruška
Hide whitespace changes
Inline Side-by-side
Showing with 73 additions and 0 deletions
+73 -0
  • Cv5.md Cv5.md +73 -0
  • No files found.
Cv5.md 0 → 100644
View page @ 2b5a3c3f
# Cvičenie 5
Na minulom cvičení sme robili kalkulačku. Táto však mala jeden veľký nedostatok: nedokázala upozorniť UI o dostupnosti výsledku. Dnes sa to zmení.
## 5.1 Call me back
Minulý týždeň sme mali možnosť vidieť niekoľko udalostí, ktoré sa vykonali pri stlačení tlačidla. Čo ale ak chceme, aby sa akcia vykonala bez nášho pričinenia, napríklad, keď sa zmení sledovaná hodnota.
Keďže máme mať oddelenú programovú logiku od UI, nemôžeme priamo z kalkulačky nastavovať hodnoty TextBoxu. Dokážeme však ale nejakým spôsobom odoslať referenciu na funkciu zodpovednú za aktualizovanie TextBoxu.
```csharp
private EventHandler eventHandler; //predstavuje neparametrický event handler - chýba EventArgs
```
Ak použijeme typový parameter T, tak vieme dosiahnuť nasledovné:
```csharp
private EventHandler<T> eventHandler; // default, do not use
//----------------------------------------------------------
private EventHandler<int> eventHandler = OnSomething;
private void OnSomething(object sender, int args)
{
//magic happens here
}
//other class, store the event handler as a variable
public void SetOnUpdateHandler(EventHandler<int> eventHandler)
{
this.eventHandler = eventHandler;
}
```
Typový parameter nám, narozdiel od pretypovania, zabezpečuje vykonanie kontroly pri kompilácií, takže nehrozí runtime exception ako pri nesprávnom pretypovaní a vďaka tomu, že sa nemusí riešiť (un)boxing je to aj rýchlejšie.
Na mieste tento event vieme vyvolať dvoma spôsobmi:
```csharp
eventHandler.Invoke(sender, eventArgs); //variant 1
eventHandler(sender, eventArgs); //variant 2
eventHandler.Invoke(this, 5);
```
EventHandler môže byť využitý len triedou, ktorá ho definuje, ale vie referenciu naň odovzdať aj objektom iných tried, ktoré ho následne môžu zavolať nad objektom pôvodnej triedy.
## 5.2 Properties
Doteraz sme používali členské premenné, ku ktorým sme mali prístup pomocov gettera a settera. C# však ponúka aj iný, často vhodnejší prístup (tieto akcie sa vykonajú vždy pri prístupe ku premennej, narozdiel od gettera/settera ktorý musý byť volaný explicitne):
```csharp
public int MyProperty {get; set;} //public getter & setter
public int MyProperty {get; private set;} //public getter, private setter
private int _myProperty;
public int MyProperty
{
get
{
//other magic may happen here
return MyValue;
}
private set
{
MyValue = value; //value is implicitly declared as the input value
//other magic may happen here
}
}
```
Upravte kalkulačku, aby pracovala s properties namiesto klasických členských premenných a na vhodnom mieste zabezpečte, aby bol o zmene hodnoty upozornený TextBox a aby sa aktualizoval.
\ No newline at end of file
Clone repository
  • Assignment part 1
  • Assignment part 2
  • Assignment part 3
  • Cv10
  • Cv11
  • Cv4
  • Cv5
  • Cv7
  • Cv8
  • Cv9
  • Requirements
  • Home