first commit

This commit is contained in:
Tóth Ádám
2024-11-19 19:04:02 +01:00
commit de464b937d
8837 changed files with 493452 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
Label
Target attribútummal Alt + N billentyűkombinációval a megadott elemre helyezhetjük a fókuszt (ez esetben a textBox1-re).
CheckBox és RadioButton
Kiválasztható értékek egyszerű bevitele. CheckBox (jelölőnégyzet), RadioButton (választógomb). A CheckBox és a RadioButton is a ButtonBase osztály leszármazottjai.
A jelölőnégyzet egy vagy több egymástól független beállítás közötti választást teszik lehetővé. IsEnabled: Módosítható-e a beáálítása (alapértelmezetten True), IsChecked: Ki van-e alapból választva a beállítás (alapértelmezetten False).
Egyéb vezérlők
Ezek a vezérlők nem rendelkeznek Content tulajdonsággal. Pl. Image, vagy a TextBlock.
TextBox
Szöveg bevitelére és megjelenítésére alkalmas vezérlő. Amennyiben csak szöveg megjelenítésére szeretnénk használni, az IsReadOnly tulajdonság értékét True-ra állítani. Textwrapping: Beírt szöveg tördelése (automatikus tördelés a Wrappel lehet). VerticalScrollBarVisibility: tulajdonság Visible érték beállításával megjelenik a ScrollBar.
TextBlock
Kisebb mennyiségű szöveg megjelenítésére alkalmas. Nem támogatja a gyorsbillentyűk használatát (Ctrl + C, Ctrl + V, stb.).
ListBox
A ListBox vezérlővel alapértelmezés szerint egy elem kiválasztására van lehetőség.
SelectedIndex: Az kiválasztott elem indexét adja vissza.
SelectedItem: A kiválasztott elem nevét adja vissza.
IsSelected: Pozitív értékű, amennyiben az aktuális elem kijelölt állapotban van.
Single: Egy elem kiválasztását teszi lehetővé.
Multiple: Több elem kiválasztását teszi lehetővé az adott ListBoxon belül.
Extended: Több elem kiválasztását teszi lehetővé, viszont a Ctrl gomb lenyomásával több ListBox elemét is ki lehet választani.

View File

@@ -0,0 +1,12 @@
LINQ alapműveletek
A LINQ to Objects az IEnumerable<T> IEnumerable interfészeket megvalósító (foreach ciklussal bejárható) kollekciók esetén működnek. A megvalósítás a System.Linq névtérben kapott helyet, amit alapvetően nem kell használatba vennünk.
Lambda szintaxis: elemek.Where(i => i.x > 10).Select(i => i.x);
Query szintaxis: var eredmeny = from elem in elemek
where elem.x > 10
select elem.x;
OrderBy: Növekvő sorrendbe rendezi a listát
OrderByDescending: Csökkenő sorrendbe rendezi a listát

View File

@@ -0,0 +1,23 @@
A lambda kifejezés szintaxisa látható módon jelen esetben sokkal egyszerűbb, mivel csak azt kell megadnunk, hogy mi szerint rendezünk csoportba, az eredmény pedig már a csoportok sorozata lesz. Egy csoport egy kulcsból (Key) és az elemekből áll. A kulcs a csoportosítási változó típusát veszi fel, az elemek pedig a kiválasztási elemek lesznek. A példából látható, hogy a csoportok bejárásához két foreach ciklus szükséges.
A join műveleteknek több fajtája van. Objektumok esetén legkönnyebben az inner join művelet valósítható meg. Ez két típus metszetét jelenti.
A példában látható módon az összekapcsolás első lépése a szokásos változó hivatkozás az első kollekcióból, majd jön a join kulcsszó, ami után szintén egy változót hivatkozunk be a második kollekcióból. Ezután meg kell adni az összekapcsolási feltételt. Ezt az on után kell megtenni. Jelen esetben itt az a feltételünk, hogy az Y változóknak meg kell egyeznie. Az összekapcsoláshoz minden esetben valamiféle egyenlőségre kell visszavezetnünk a feltételt. A feltétel közepén az Equals kulcsszónak kell állnia.
Lambda szintaxis esetén a Join metódus első paramétere a kapcsolni kívánt kollekció. Ezt követi két összekapcsolási kulcs kiválasztás. Az első kiválasztás az első kollekcióra érvényes, amin hívtuk a Join metódust, a második pedig a kapcsolni kívánt kollekcióra érvényes. Az utolsó paraméter pedig az eredmény leképezést valósítja meg.
LINQ Sorozat és elem műveletek
A most következő műveletek csak lambda esetében használható:
Kihagyás és megadott számú elem kiválasztása:
Ha elemeket szeretnénk kihagyni egy kollekcióból, akkor a Skip(), metódust alkalmazhatjuk. Ennek paramétereként a kihagyandó elemek számát kell megadnunk. Ha pedig csak egy adott mennyiségű elemet szeretnénk kiválasztani, akkor a Take() metódust alkalmazhatjuk. Ennek paramétere szintén egész szám, ami a kiválasztandó elemek számát adja meg. Mindkét metódus esetén, ha kifutna az eredeti kollekció méretéből, akkor egy üres kollekciót kapunk.
First(): Az első elemet adja vissza. Ha nincs, akkor hibát dob.
FirstOfDefault(): Az első elemet adja vissza. Ha nincs, akkor egy alapértelmezett értéket ad vissza.
ElementAt(): A kollekció egy adott elemét adja vissza. Bemenetként az elem sorszámát várja, és hibát dob, ha nem létezik a megadott sorszámmal elem.
var eredmeny = elemek.FirstOrDefault(i => i.Y == 99)
var eredmeny2 = elemek.Last(i => i.Y == 1)

View File

@@ -0,0 +1,5 @@
A using használata
A using kulcsszó C#-ban egy speciális konstrukció, amely biztosítja, hogy egy adott erőforrás, mint például fájl vagy hálózati kapcsolat, automatikusan felszabaduljon, miután nincs már rá szükség. A using blokkot tipikusan olyan erőforrások kezelésére, amelyek implementálják az IDisposable interfészt.
A usingot arra használjuk, hogy biztosítjuk az erőforrások, például fájlok, adatbázis kapcsolatok.

View File

@@ -0,0 +1,27 @@
DistinctBy(): Azonos elemeket lehet kiszűrni egy összetett adattípusból.
var egyediX = elemek.DistinctBy(i => i.X)
Count(): Megszámolja azokat az elemeket, amelyekre a feltétel igazzá válik.
var parosX = elemek.Count(i => i.X%2 == 0)
Any(): Igaz értéket ad vissza, ha van elem az összetett adattípusunkban. Feltétel megadása esetén azt figyeli meg, hogy a felételnek megfelelő elem létezik-e.
Min(), Max(), Avg(): Minimum, maximum, átlagszámolás.
var avg = elemek.Avg(i => i.X * i.Y)
Unió:
var union = ints1.Union(ints2)
Metszet:
var intersect = ints1.Intersect(ints2)
Csak egyik listában van:
var except = ints1.Except(ints2)
Concat(): Két lista elemeinek összefűzésére használható. Ismétlődést nem szűr.
var concat = a.Concat(b);
Zip(): Tuple formában összefűz egy elemet az egyik listából, egy elemet a másik listából.
var result = a.Zip(b)
Chunk(): Egy listát a Chunk()-ba megadott számú kisebb listákra szedi szét.

View File

@@ -0,0 +1,38 @@
WPF
A Windows Presentation Foundation (WPF) a Windows Form utódjának tekinthető asztali alkalmazások fejlesztése terén. Az egyik legnagyobb és egyben legfontosabb különbség, hogy az alkalmazás megjelenéséért felelős kód elkülönül az alkalamzás funkcionalitását leíró kódtól. A WPF GDI/GDI+ helyett DirectX-et használ. Emiatt tetszőleges típusú felhasználói felületet hozhatunk létre. Tervezhető akár komplex háromdimenziós grafika is, de üzleti alkalmazások esetében is kiaknázhatóak a gazdag grafikai hatások. A DirectX már nem a CPU, hanem a GPU erőforrásait használja. Raszter grafika helyett már vektor alapúak az elemek. Emiatt az egyes elemek tetszőlegesen átméretezhetőek. Továbbá kevesebb helyet foglalnak. Viszont továbbra is használja a raszter grafikát.
Előnyei:
Dokumentum és nyomtatás
Biztonság, hozzáférhetőség és lokalizáció
Együttműködést kínál a következővel: Windows Űrlapvezérlők
A Direct3D-t grafikus alkalmazásokban használják, ahol a teljesítmény fontos
A megjelenítéshez a videókártyát használja
A vektor-alapú grafika lehetővé teszi az alkalmazás méretezését minőségromlás nélkül
A WBF támogatja a lebegőpontos logikai pixelrendszert és a 32 bites ARGB színt
Stílusok és vezérlősablonok újradefiniálása
Nemzetközi betűtípusok építése összetett betűtípusokból
A WPF szövegmegjelenítés segít a ClearType technolósgia előnyeinek kihasználásában
Lehetővé teszi az előre rendelt szöveg gyorsítótárazási technikájának használatát a videómemóriában
Erőforrás-alapú megközelítés minden vezérléshez
A bemutató időzítőit a WPF inicializálja és kezeli
A videó és az animáció közötti kapcsolat szintén támogatott
A WPF-ben a stílus olyan tulajdonságok halmaza, amelyeket a vizuális megjelenítéshez használt tartalomra kell alkalmazni
A WPF sablonjai segítenek a dokumentum UI értékének megváltoztatásában
A parancsok az események elvontabb és lazábban kapcsolt változatai
A WPF parancsok támogatása csökkent a megírandó kód mennyiségét
A WPF többrétegű architektúrájának legfelső szintjén a PresentationFramework.dll áll. Ezt használjuk fejlesztés közben, itt vannak implementálva a különböző vezérlők (Button, Border,...) stílusok, stb. PresentationFramework.dll számára az alaposztályokat (UIElement, Visual, stb.) a PresentationCore.dll biztosítja. Ezekből az osztályból származnak többek között a formák (shape) és a vezérlők (controls). A WindowsBase.dll a WPF alapvető működéséhez szükséges objektumosztályokat tartalmazza. A WPF névterei a System.Windows névtérben helyezkednek el.
System.Object
A WPF összes osztálya a System.Object-ből származik. A WPF legfontosabb komponensei a PresentationFramework, PresentationCore és a milcore, tartalmazzák a WPF legfontosabb kódrészleteit. Ezek között a milcore az egyetlen nem menedzselt kódban írt komponens.
XAML
XAML (eXtensible Application Markup Language) egy XML alapú deklaratív jelölőnyelv, amely a .NET keretrendszer modelljébe illeszkedve leegyszerűsíti a grafikus felhasználói felület (GUI) kialakítását. XAML deklaratív nyelv nyelvtani szabályrendszere nagyon egyszerű. Általános tervezési alapelve, hogy a XAML dokumentum minden eleme - kivéve, ha egy attribútumot definiál
A XAML előnyei:
Elválasztja a front-end megjelenést a háttér logikától
A legegyszerűbb módszer a felhasználói felületek ábrázolására
Hatékonyan dolgozik az eszközökkel

View File

@@ -0,0 +1,2 @@
Canvas
A canvas (vászon) pixel pontosan megadott elrendezést tesz lehetővé, ideális fix méretű alkalmazások elkészítéséhez. A Canvas-on elhelyezett elemek pozícióját a Top - Left és a Bottom - Right tulajdonságával tehetjük meg.

View File

@@ -0,0 +1,21 @@
Image
Az Image kép megjelenítésre szolgál. Legfontosabb tulajdonsága a Source. Lehet URI-t, vagy relatív hivatkozással megadni a kép forrását. Stretch beállításai:
None: A kép az eredeti méretében jelenik meg. Levágja a képnek azon részét, ami nem fér rá a kijelölt területre.
FIll: Kitölti a képel a kijelölt területet, nem figyeli az eredeti méretarányokat, a kép torzulhat.
Uniform: A méretarány megtartásával tölti ki a képpel a kijelölt területet.
UniformToFill: Teljesen kitölti a képpel a kijelölt terültetet a méretarány megtartásával.
Slider
A csúszkák egy beállítás értékének megadását teszik lehetővé egy megadott értéktartományon belül.
Slider beállításai:
IsDirectionReserved: Alapértelmezés szerint a csúszka bal oldalához van rendelve a minimum érték, és a jobb oldalához a maximum. Amennyiben ez a beállítás True, megcserélődnek az oldalak értékei.
IsEnabled: A csúszka engedélyezését vagy letiltását teszi lehetővé.
LargeChange: PageUp, PageDown gombokhoz lehet beállítani a lépésközt.
Maximum: A csúszka maximális értéke.
Minimum: A csúszka minimális értéke.
Orientation: A csúszka orientációja állítható be vele.
SmallChange: A kurzormozgatóhoz rendelt lépésköz állítható be vele.
Value: Az aktuális érték.
Menu
A Menu tulajdonképpen lehetővé teszi a leggyakrabban használt parancsok hierarchikus elrendezését.

View File

@@ -0,0 +1,41 @@
Algoritmusok
A problémamegoldás menete:
Valós problémák ->
Algoritmus:
Az algoritmus egy hatékony eljárás egy feladat vagy probléma.
Algoritmusok futásidő elemzése
Futási idő: egy bizonyos bemenetre a végrehajtott (gépfüggetlen) alapműveletek vagy "lépések" száma.
A lépésszám pontos meghatározása helyett általában elegendő lépésszám nagyságrendjének meghatározása, és ebből már (kis óvatossággal) következtetni lehet arra, hogy az algoritmus mennyire hatékony, avagy hogyan fog viselkedni nagyobb értékekre.
Aszimptotikus hatékonyság:
Ha a bemenet mérete elég nagy, akkor az algoritmus futási idejének csak a nagyságrendje érdekes.
Az O (Ordó) jelölés:
A O jelölést arra használjuk, ahogy a futási idő növekedését aszimptotikusan alulról és felülről konstant távolságra behatároljuk.
Például a bináris keresés futási ideje legrosszabb esetben O(log2n), helytelen lenne azt állítani, hogy a bináris keresés futási ideje O(log2n) minden esetben.
A bináris keresés futási ideje soha nem rosszabb, mint O(log2n), de van, amikor ennél jobb.
Jó lenne egy olyan aszimptotikus jelölés, ami azt fejezné ki, hogy "a futási idő maximum ennyivelnő, de ennél korábban is nőhet." Erre használjuk az "O" jelölést.
Ha a futási idő O(f(n)), akkor elég nagy n esetén a futási idő maximum k*f(n) valamilyen konstans k érték mellett. Az O(f(n)) futási időt így kell elképzelni.
Azt mondjuk "f(n) ordója" vagy egyszerűen "O(f(n)) (kiejtésben használatos még az ordó(f(n)) is). Az O jelölést aszimptotikus felső korlátként használjuk, mivel a futási időt felülről korlátozza, ha az input mérete elég nagy.
Most már minden esetben jellemezni tudjuk a bináris keresés futási idejét. Mondhatjuk azt, hogy a bináris keresés mindig legfeljebb O(log2n) idő alatt lefut. Egy ennél erősebb állítással kijelenthetjük, hogy a legrosszabb esetben a futási idő O(log2n). De egy mindent magába foglaló állítás az lesz, amikor azt mondjuk, hogy a bináris keresés futási ideje O(log2n).
Tömb
A tömb egy olyan adatszerkezet, amely menet közben nem méretezhető át. Tehát ha új elemeket szeretnénk egy meglévő tömbhöz adni, az csak úgy fog működni, hogy létrehozunk egy új tömböt, ami az új elemek és a meglévő elemek tárolására alkalmas, ezután pedig bemásoljuk a meglévő elemeket és az új elemeket a teljesen új tömbünkbe.
Tömbökben referencia típusokat is alkalmazhatunk, viszont ebben az esetben nem elég példányosítani a tömböt, az egyes elemeket is példányosítani kell, mivel ebben az esetben a tömb csak az objektumra mutató referenciát tárolja, így példányosítás nélkül a tömb elemeinek értéke null lesz.
Az osztályokat ben muszáj a konstruktuk segítségével példányosítani. Erre célra vezették be a nyelvben az Object Initializer szintaxist, amivel egy osztály adattagjai úgy adhatók meg, mint egy tömb elemei.
Ez akkor jön jól, ha van egy osztályunk, amely adattagokkal rendelkezik de a konstruktor az objektum minden adattagjának beállításához nagyon összetett és komplikált lenne. Ebben az esetben nem érdemes konstruktort írni. Az objektum inicializáló szintaxis a következő:
var objektum = new Osztaly()
{
Adattag1 = érték,
Adattag2 = érték,
Adattag3 = érték
};
Ez a szintaxis csak olyan adattagok esetén alkalmazható, amelyek publikusan is írhatóak. Egyéb védelmi szinttel rendelkező adattagok nem írhatóak ezzel a módszerrel. Ezen adattagok beállítására továbbra is a konstruktor szintaxis használható.

View File

@@ -0,0 +1,21 @@
Adatstruktúra interfészek
A kollekcióhoz kapcsolódó interfészek közül az egyik legfontosabb az IEnumerable<T> interfész. Ez teszi lehetővé, hogy mindegyik.
Az absztrakció következő szintje az IReadOnlyCollection<T> és ICollection<T> interfészek. Az ICollection<T> egy módosítható kollekciót ír le, aminek az elemei törölhetőek és bővíthetőek. Az IReadOnlyCollection<T> pedig egy olyant, amiből csak olvasni tudunk, de tudjuk az elemek számát.
Az olyan típusok esetén, mint a lista, halmaz és asszociatív tömb kapunk speciális interfészeket, mind olvasható és módosítható változatban is.
Láncolt lista
A tömb adatszerkezet kiváló ha előre tudjuk, hogy mennyi elemre van szükségünk. A bővítés csak úgy lehetséges, hogy létrehozzuk egy újabb tömböt, aminek a mérete a hozzáadandó elemek számával meg van növelve. Az új tömbbe átmásoljuk a tömb elemeit, majd az új tömbhöz hozzáadjuk az új elemeket. Végezetül pedig töröljük az eredeti tömböt.
Az algoritmus leírásából kiolvasható, hogy ez nem éppen ideális, mivel a sebességre igen negatív hatással van a másolás. Továbbá a másolás folyamán egy rövid időre duplázódik a programunk memóriahasználata.
Egy sokkal jobb megoldás lehet nagy mennyíségú, előre nem ismert számú adat tárolására a láncolt lista szerkezet.
A láncolt lista egy eleme két részből épül fel. Egyrészt tartalmazza a tárolni kívánt adatot, vagy adatokat és tartalmaz egy olyan mutatót, ami a lista egy másik elemét mutatja. Ha referencia a következő elemre nem létezik, akkor a lánc végén vagyunk.
A láncolt lista a dinamikus tömbökhoöz képest hátránya a közbülső elemek elérhetőségéből ered. Míg egy tömb esetén ha tudjuk, hogy a k. elemet szeretnénk elérni, akkor a tömb idnexelésével rögtön hozzáférhetünk ehhez az adathoz, addig a láncolt listában a lista elejéről indulva a mutatókon keresztül addig kell lépkedni, míg a k. elemhez nem érünk. A véletlenszerű lista elem megtalálása a lista hosszávak arányos időt igényel.