Baze i VB6, ja sam radio ne tako davno, VB6+Access, užas, ali ADO je druga priča.
Tip Variant, sam Bog ge je izmislil za neke stvari
Baze i VB6, ja sam radio ne tako davno, VB6+Access, užas, ali ADO je druga priča.
Tip Variant, sam Bog ge je izmislil za neke stvari
Ne znam što je sporno oko Close metode, evo sada sam probao meni radi, ma to je on nešto zeznuo.
Close se više odnosi na objekt forme, ako u aplikaciji ima jednu formu to bi kako ti kažeš trebalo raditi.
I kliknem i nece,sta sam mogo zezenut?
Evo prije nekih 10-ak dana za jednoga prijatelja sam sklepao preglednik slika, ništa korisno, 5-10 minuta posla, naravno zahvaljujući .NET-u.
Koristio sam WinForme, button Close sam povezao sa funkcijom čije je tjelo bilo:
this.Close();
http://www.2shared.com/file/85nnKy6i/Preglednik.html
Pod Linq vjerojatno misliš na LinqToSQL, jer Linq sam po sebi ima još funkcionalnosti (LinqToObjects, LinqToXml...)
EF je moćniji od LinqToSQL, ali je i kompliciraniji za održavanje zbog održavanja modela baze i domain modela.
Za većinu potreba je LinqToSQL, tj SQLMetal dovoljan gdje se oboje automatski generira iz modela baze.
Sve ovisi naravno što ti treba.
LinqToSQL je po meni dovoljno dobar za ozbiljne business projekte.
I Close() i Application.Exit() bi trebali raditi, no vjerojatno nije registriran event handler.
this.button2.Click += new System.EventHandler(this.button2_Click);
Ovo se može napraviti ili u Visual Studio dizajneru (double click na button, registracija handlera je kreirana u *.Designer.cs) ili ručno napisati to u konstruktoru forme, poslije InitializeComponent();
I Close() i Application.Exit() bi trebali raditi, no vjerojatno nije registriran event handler.
this.button2.Click += new System.EventHandler(this.button2_Click);
Ovo se može napraviti ili u Visual Studio dizajneru (double click na button, registracija handlera je kreirana u *.Designer.cs) ili ručno napisati to u konstruktoru forme, poslije InitializeComponent();
Pod određenim okolnostima (nisam posve siguran kada, da budem iskren), win 7 zna izbaciti onu famoznu poruku tipa "This program might not have installed correctly".
Kao lijek preporučam koristiti Environment.Exit(0) jer na taj način jasno daješ do znanja OS-u da je proces ugašen normalno. Neka me netko ispravi ako griješim.
Da, neovisno o broju Formi, za razliku od this.Close, koji će samo izaći iz te Forme.
Da, neovisno o broju Formi, za razliku od this.Close, koji će samo izaći iz te Forme.
Ma napisao sam to zato što je naveden Application.Exit pa se vjerojatno i this.Close() odnosi na main form...
Pod Linq vjerojatno misliš na LinqToSQL, jer Linq sam po sebi ima još funkcionalnosti (LinqToObjects, LinqToXml...)
EF je moćniji od LinqToSQL, ali je i kompliciraniji za održavanje zbog održavanja modela baze i domain modela.
Za većinu potreba je LinqToSQL, tj SQLMetal dovoljan gdje se oboje automatski generira iz modela baze.
Sve ovisi naravno što ti treba.
LinqToSQL je po meni dovoljno dobar za ozbiljne business projekte.
Mi koristimo LinqToSql za poprilično velik projekt. I sve radi bez problema. Nudi nevjerojatnu lakoću korištenja i običnim ljudima bez gotovo ikakvog znanja o sql-u daje CRUD na pladnju. Za neke intenzivne stvari gdje su performanse iznimno bitne koristimo ADO ali to je možda 1% ukupnog "posla" sa bazom. Svakako preporuka za LinqToSql bez obzira na veličinu projekta...
Kao što sam maloprije rekao, pretežno radim ASP.NET aplikacije, do sada sam koristio ADO.NET EF za pristup bazama i super mi je, ali nagovorili ste me da pogledam i LinqToSql.
Nemoj ni pokušavati ako koristiš inheritance... ako ti je to nebitno bit ćeš vrlo zadovoljan!
Baze i VB6, ja sam radio ne tako davno, VB6+Access, užas, ali ADO je druga priča.
Tip Variant, sam Bog ge je izmislil za neke stvari
Istina, ponekad je bio melem na ranu.
Iskreno, danas sam prvi puta imao stvarnu potrebu za dynamic tipom u C# i stvarno mi je uljepšao dan. (sjetio se sada kad sam vidio Variant iako nije baš potpuna analogija).
Ucim delegate preko pluralsighta trenutno,ako sam dobro shvatia koncept je da se napravi delegat koji ima određene osobine,npr vraća void a uzima string varijablu onda ja mogu radit varijable u koje cu stavit taj delegat a kroz njega proslijedit jednu ili više metoda koje odgovaraju njegovim osobinama, i onda koristeci tu varijablu mogu pozvat sve te metode na neki objekt u isto vrijeme, jesam promašia nešto?
Ucim delegate preko pluralsighta trenutno,ako sam dobro shvatia koncept je da se napravi delegat koji ima određene osobine,npr vraća void a uzima string varijablu onda ja mogu radit varijable u koje cu stavit taj delegat a kroz njega proslijedit jednu ili više metoda koje odgovaraju njegovim osobinama, i onda koristeci tu varijablu mogu pozvat sve te metode na neki objekt u isto vrijeme, jesam promašia nešto?
delegat je referenca na funkciju. i c# ga gleda kao zasebni tip. U .NET 1 i 2 si ga morao definirati kao posebnog clana klase (iako je .net 2 mislim uveo aninimne delegate), ali sa C# 3 i su dosli lambda izrazi, koji prakticki kreiraju istu stvar u compile time-u, u laksi su za koristiti (kod je pregledan).
Npr:
Func<string,bool> provjera = s=> return s == "Bug";
bool rez = provjera("Mreza");
Func delegatu pozes prosljediti vise parametra, i uvijek vraca nesto, bool u ovom primjeru. Ako ne zelis da vrati nista, znaci void, onda koristis Action<T> (Action<T1,T2,...> ovisno i broju parametra). Ima jos i Predicate<T>, sto je isto kao i Func<T,bool> - znaci predicate vraca uvijek bool.
Inace, kada ovako definiras delegat, odnosno neku "inline" metodu unutar druge metode, to je closure, cesto spominjan termin u (funkcionalnim) programskim jezicima.
Glede EF vs L2S, imajte na umu da se L2S vise ne razvija, iako ce biti i u narednim verzijama .NET frameworka. Ne bi preporucio koristenje L2S za bilo sta kompleksnije, odnosno uopce ga ne bi preporucio, jer u biti nema nikakve prednosti u odnosu na EF. EF je jednostavan za koristiti, podrzava nekoliko nacina rada - kreiranja potrebnih klasa, od drag-drop baze u EF designer, sto je prakticki isto kao L2S, do code-first pristupa (sve se rucno pise u kodu). Takodjer, EF dataContext (Unit of Work) ima vise mogucnosti od L2S, kao Include, detached entities, POCO, laksi mocking (za unit testing) ...
Svi oni u pozadini koriste ADO.NET, sto je low-level API za rad sa DBMS.
Postoji i opcija koristenja lightweight ORM alata, kao sto su Simple.Data, Massive, ili ono nesto sta dolazi sa WebMatrixom :) Njih ne treba konfigurirati (osim conn stringa na bazu naravno), podrzavaju pisanje upita u SQL-u ili nekom svom query/fluent api nacinu, i naravno mapiranje rezultata upita na objekte. Brzi su, trose malo memorije, i jednostavni su za koristiti, sto su im glavne prednosti. Jako se naslanjaju na dynamic mogucnosti .NET 4.
Naprimjer, u Simple.Data se moze ovo, bez ikakvog konfiguriranja, kreiranja klasa, bilo cega:
dynamic product = Database.Open().Products.FindById(5);
Console.Write(product.Name);
ili ako se zeli mapirati rezultate upita na objekt:
Product product = Database.Open().Products.FindById(5);
Ucim delegate preko pluralsighta trenutno,ako sam dobro shvatia koncept je da se napravi delegat koji ima određene osobine,npr vraća void a uzima string varijablu onda ja mogu radit varijable u koje cu stavit taj delegat a kroz njega proslijedit jednu ili više metoda koje odgovaraju njegovim osobinama, i onda koristeci tu varijablu mogu pozvat sve te metode na neki objekt u isto vrijeme, jesam promašia nešto?
delegat je referenca na funkciju. i c# ga gleda kao zasebni tip. U .NET 1 i 2 si ga morao definirati kao posebnog clana klase (iako je .net 2 mislim uveo aninimne delegate), ali sa C# 3 i su dosli lambda izrazi, koji prakticki kreiraju istu stvar u compile time-u, u laksi su za koristiti (kod je pregledan).
Npr:
Func<string,bool> provjera = s=> return s == "Bug";
bool rez = provjera("Mreza");
Func delegatu pozes prosljediti vise parametra, i uvijek vraca nesto, bool u ovom primjeru. Ako ne zelis da vrati nista, znaci void, onda koristis Action<T> (Action<T1,T2,...> ovisno i broju parametra). Ima jos i Predicate<T>, sto je isto kao i Func<T,bool> - znaci predicate vraca uvijek bool.
Inace, kada ovako definiras delegat, odnosno neku "inline" metodu unutar druge metode, to je closure, cesto spominjan termin u (funkcionalnim) programskim jezicima.
hvala na objašnjenju ali mi neke stvari još uvjek nisu sjele,dakle ja napravim delegat i dam mu neke osobina, npr vrača void a uzima string, ja onda tom delegatu mogu prosljedit određene metode? drugim riječima učinit da on referencira jednu ili više metoda i onda kasnije ako želim pozvat sve te metode na neki objekt,samo pozovem delegat koji referencira sve te metode? pokušavam shvatit funkcjonalnost delegata u kratkim crtama,onda ču ja lako pogledat kako ih se koristi.
dynamic product = Database.Open().Products.FindById(5);
Console.Write(product.Name);
ili ako se zeli mapirati rezultate upita na objekt:
Product product = Database.Open().Products.FindById(5);
Isto i sa L2S:
var usdc = new UsersDataContext();
dynamic usr = usdc.Users.FirstOrDefault(p => p.Id == 200);
MessageBox.Show(usr.Naziv);
hvala na objašnjenju ali mi neke stvari još uvjek nisu sjele,dakle ja napravim delegat i dam mu neke osobina, npr vrača void a uzima string, ja onda tom delegatu mogu prosljedit određene metode? drugim riječima učinit da on referencira jednu ili više metoda i onda kasnije ako želim pozvat sve te metode na neki objekt,samo pozovem delegat koji referencira sve te metode? pokušavam shvatit funkcjonalnost delegata u kratkim crtama,onda ču ja lako pogledat kako ih se koristi.
Da, delegat moze primiti vise referenci. Evo primjer koda, natipkan ovako nabrzaka:
class Program
{
static void Main(string[] args)
{
Klasa objekt = new Klasa();
Klasa.CalcHandler handler = null;
handler += Zbroj;
handler += Mnozi;
objekt.Start(handler);
Console.ReadKey();
}
static void Zbroj(int a, int b)
{
Console.WriteLine(a + b);
}
static void Mnozi(int a, int b)
{
Console.WriteLine(a * b);
}
private class Klasa
{
public delegate void CalcHandler(int a, int b);
public void Start(CalcHandler calcHandler)
{
if (calcHandler != null)
calcHandler(2, 4);
}
}
}
to je multicast delegate, i u biti jedino se koristi (sto sam ja vidio) kod evenata - na jedan event mozes pretplatiti vise metoda, a kod definiranja eventa uvijek kazes kakav je potpis eventa, tako da definiras delegat.
dynamic product = Database.Open().Products.FindById(5);
Console.Write(product.Name);
ili ako se zeli mapirati rezultate upita na objekt:
Product product = Database.Open().Products.FindById(5);
Isto i sa L2S:
var usdc = new UsersDataContext();
dynamic usr = usdc.Users.FirstOrDefault(p => p.Id == 200);
MessageBox.Show(usr.Naziv);
od kuda je ovaj usdc.Users? Moras ga kreirati putem designera ili nekako. U simple.data niti to nemoras, jerbo je sve dynamic.
Znaci, file/new project, je sve sta moras napraviti. Dodas DLL od simple.data i conn string u config, i mozes upisati ovu liniju koju sam napisao!
Da, delegat moze primiti vise referenci. Evo primjer koda, natipkan ovako nabrzaka:
malo mi je jasnije sad,sta se tice ovoga sta sam citira valjda si mislia delegat može primiti više metoda koje če referencirati,a ne primiti više referenci jer bi on sam trebao bit referenca? kad smo več kod toga, objekti stoje na heap-u kojeg ima dosta al je spor, a reference stoje na stacku koji je dosta brži jel? naravno reference opet pokazuju na neki objekt koji je na heapu?
Ja sam za sada na L2S, za moje potrebe vise nego dovoljan. Entity sam nesto cackao ali ne dovoljno da bi ga poceo zaozbiljno koristiti. Neznam koliko bih dobio prelaskom na njega.
dynamic product = Database.Open().Products.FindById(5);
Console.Write(product.Name);
ili ako se zeli mapirati rezultate upita na objekt:
Product product = Database.Open().Products.FindById(5);
Isto i sa L2S:
var usdc = new UsersDataContext();
dynamic usr = usdc.Users.FirstOrDefault(p => p.Id == 200);
MessageBox.Show(usr.Naziv);
od kuda je ovaj usdc.Users? Moras ga kreirati putem designera ili nekako. U simple.data niti to nemoras, jerbo je sve dynamic.
Znaci, file/new project, je sve sta moras napraviti. Dodas DLL od simple.data i conn string u config, i mozes upisati ovu liniju koju sam napisao!
Uh, to ne volim. To me nekako podsjeća na NOSQL/Ruby fore... i ovo gore što sam ja napisao mi je pretjerano. Više volim strongly-typed pristup...
@athlon64, evo ovdje je @Private objasnio delegate:
http://www.bug.hr/forum/topic/programiranje/c-delegati/67373.aspx
Probaj ovo izmjeniti:
int input1 = Convert.ToInt32(textBox1.Text.ToString());
int input2 = Convert.ToInt32(textBox2.Text.ToString());
EDIT :
i ovo u poruci
int rezultat = input1 * input2;
MessageBox.Show(rezultat.ToString());
jer koliko vidim ti u poruci množiš dva stringa znaći sve unutar znakova " se tretira kao string, a operator množenja ne radi nad stringovima ( što bi bilo fora da radi LOL )
Jedna napomena :
kada radiš s neformatiranim unosima u tvom slučaju preko kontrole textbox tada obavezno kod koji prima unos ugnijezdi unutar try - catch bloka, npr. što ako netko umjesto broja ubaci niz alfabeta ili npr u tvom slučaju broj sa pomičnim zarezom. OK C3 je moderan jezik i vrlo vjerojatno će eliminitari dio iza decimalne točke i uzet u obzir samo cjei dio broja, ali opet postoji velika vjerojatnost da se program sruši.
Kod programiranja moraš uzimat u obzir sve možebitne situacije i pravino doskočit svim mogučim scenarijima.
Ubaci i ovo :
EDIT :
i ovo u poruci
int rezultat = input1 * input2;
MessageBox.Show(rezultat.ToString());