Forum » Programiranje » [C#]Par pojmov
[C#]Par pojmov
abyssus ::
Malce sem prebiral še o C# in naletel na par pojmov, ki sem si jih sicer znal nekako razložit ampak mi ni jasno, kje bi jih bilo dobro uporabljat.
Pojmi:
1. Uporabnost partial classov
2. Kje je boljše uporabiti struct kot pa class
3. Threads
4. Interface
Lahko kdo malce razloži? :) Hvala.
P.S Verjamem, da je vse na googlu ampak mi je vseeno ljubše, če je povedano v slovenščini. :)
Pojmi:
1. Uporabnost partial classov
2. Kje je boljše uporabiti struct kot pa class
3. Threads
4. Interface
Lahko kdo malce razloži? :) Hvala.
P.S Verjamem, da je vse na googlu ampak mi je vseeno ljubše, če je povedano v slovenščini. :)
Looooooka ::
partial class je uporaben, ko mas del kode autogenerirane pa ji vseeno sam dodajas neko svojo funkcionalnost in je pac ne zelis vsakic dodajat not kot opcijo po generiranju.najbolj tipicen primer je recimo generiranje POCO al pa entity framework classa za dostopanje do baze.
Tisto ti lepo nardi nek burek.mdx pa burek.cs fajle.
Ce zelis dodat neko dodatno funkcionalnost temu classu je veliko bolj elegantno ce pac nardis nov class partial burek in to naredis tam.Ko bos nasljednjic spet generiral fajle iz baze...ne bos ob svojo funkcionalnost.
struct class...odvisno
struct ne more biti null(ker je tko kot integer value type), class je lahko...v classu mas lahko propertije z raznimi propertychanged eventi in je spet odvisno samo od tega za kaj tocno rabis zadevo.
Ce zelis samo sm pa tja podajat par podatkov ti bo struct zavzel veliko manj spomina kot neka zajebana class implementacija.
threads...simple.Ko zelis izvajat neke zajebane, dolge procedure in ne zelis obremenjevat GUI threada.Oz po domace...recimo, da vsaj pol minute downloadas neke podatke z interneta pa ne zelis, da tvoj program zgleda "zmrznjen"...
na interface pa lahko najbolj kmecko gledas kot na pogodbo.
class, ki implementira nek interface je kot nekdo, ki je podpisal, da se drzi nekih pravil.
Se pravi ce naredis funkcijo speci, ki kot parameter sprejme objekt tipa IBurek(ki ni nic drugega kot nek interface) mu ti lahko podas vse oblike bureka, ki jih poznas...pica,sirov,mesni
public interface IBurek
{
String BurekType {get;}
}
public class picaBurek:IBurek
{
public String BurekType {
get{
return "Pica";
}
}
public class sirovBurek:IBurek
{
public String BurekType {
get{
return "Sirov";
}
}
void speci(IBurek burek)
{
if(burek!=null)
{
Console.WriteLine(String.Format("ni lepinje bom {0} burek",burek.BurekType));
}
}
bi torej delal z obema tipoma bureka.
Cist tko na hitro...
Tisto ti lepo nardi nek burek.mdx pa burek.cs fajle.
Ce zelis dodat neko dodatno funkcionalnost temu classu je veliko bolj elegantno ce pac nardis nov class partial burek in to naredis tam.Ko bos nasljednjic spet generiral fajle iz baze...ne bos ob svojo funkcionalnost.
struct class...odvisno
struct ne more biti null(ker je tko kot integer value type), class je lahko...v classu mas lahko propertije z raznimi propertychanged eventi in je spet odvisno samo od tega za kaj tocno rabis zadevo.
Ce zelis samo sm pa tja podajat par podatkov ti bo struct zavzel veliko manj spomina kot neka zajebana class implementacija.
threads...simple.Ko zelis izvajat neke zajebane, dolge procedure in ne zelis obremenjevat GUI threada.Oz po domace...recimo, da vsaj pol minute downloadas neke podatke z interneta pa ne zelis, da tvoj program zgleda "zmrznjen"...
na interface pa lahko najbolj kmecko gledas kot na pogodbo.
class, ki implementira nek interface je kot nekdo, ki je podpisal, da se drzi nekih pravil.
Se pravi ce naredis funkcijo speci, ki kot parameter sprejme objekt tipa IBurek(ki ni nic drugega kot nek interface) mu ti lahko podas vse oblike bureka, ki jih poznas...pica,sirov,mesni
public interface IBurek
{
String BurekType {get;}
}
public class picaBurek:IBurek
{
public String BurekType {
get{
return "Pica";
}
}
public class sirovBurek:IBurek
{
public String BurekType {
get{
return "Sirov";
}
}
void speci(IBurek burek)
{
if(burek!=null)
{
Console.WriteLine(String.Format("ni lepinje bom {0} burek",burek.BurekType));
}
}
bi torej delal z obema tipoma bureka.
Cist tko na hitro...
Zgodovina sprememb…
- spremenilo: Looooooka ()
darkolord ::
Še mal dodatka:
- partial classi so uporabni ne samo pri generirani kodi, ampak povsod kjer želiš en class razbiti na več datotek; eno je na primer, ko več ljudi popravlja isti class
- structi se od classov kar precej razlikujejo, nekaj pomembnejših stvari:
- namesto reference se pri nastavljanju ustvari kopija structa
- pri structih nestatičnih polj ne moreš inicializirat vnaprej
- struct ne more imeti destruktorjev in (konstruktorjev brez parametrov)
- pri pretvorbi structa v object pride do boxinga
- struct ne more bit abstract ali sealed, metode v structu ne morjo bit abstract ali virtual
V veliki večini primerov je zato class primernejša izbira; izjema so enostavnejše podatkovne strukture, ki jih ne premikaš prav dosti okrog (npr: Color, Rect, TimeSpan, ...)
- threadi ti omogočajo, da več stvari laufaš vzporedno (večjedrni procesorji lahko dejansko vzporedno laufajo toliko stvari, kolikor imajo jeder, ostalo pa izmenično)
- partial classi so uporabni ne samo pri generirani kodi, ampak povsod kjer želiš en class razbiti na več datotek; eno je na primer, ko več ljudi popravlja isti class
- structi se od classov kar precej razlikujejo, nekaj pomembnejših stvari:
- namesto reference se pri nastavljanju ustvari kopija structa
- pri structih nestatičnih polj ne moreš inicializirat vnaprej
- struct ne more imeti destruktorjev in (konstruktorjev brez parametrov)
- pri pretvorbi structa v object pride do boxinga
- struct ne more bit abstract ali sealed, metode v structu ne morjo bit abstract ali virtual
V veliki večini primerov je zato class primernejša izbira; izjema so enostavnejše podatkovne strukture, ki jih ne premikaš prav dosti okrog (npr: Color, Rect, TimeSpan, ...)
- threadi ti omogočajo, da več stvari laufaš vzporedno (večjedrni procesorji lahko dejansko vzporedno laufajo toliko stvari, kolikor imajo jeder, ostalo pa izmenično)
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C# LinkedListOddelek: Programiranje | 1181 (1032) | PoPon2 |
» | c# datagridview in comboxOddelek: Programiranje | 1208 (1096) | OmegaM |
» | [ ASP.NET ] Vprašanje glede podajanja parametrovOddelek: Programiranje | 1567 (1298) | salesky |
» | Preusmeritev v C# formiOddelek: Programiranje | 1230 (1134) | OmegaM |
» | c++ datotekeOddelek: Programiranje | 4044 (3533) | Vesoljc |