You are on page 1of 14

C#

SADRAJ VEBI
I C# JEZIK
1. UVOD U C# (MICROSOFT VISUAL C# 2010 EXPRESS)
2. TIPOVI PODATAKA, PROMENLJIVE, OPERATORI
3. KONTROLA TOKA PROGRAMA (GRANANJE I CIKLUSI)
4. FUNKCIJE
5. NIZOVI I STRUKTURE
6. KLASE, METODE I OBJEKTI
7. NASLEIVANJE, POLIMORFIZAM
8. DODATNE TEHNIKE OOP

II WINDOWS PROGRAMIRANJE
9. OSNOVNO WINDOWS PROGRAMIRANJE (DUGMII, LABELE, TEXTBOX, ...)
10. NAPREDNE WINDOWS FORME (MENIJI, TOOOLBAR, KREIRANJE
APLIKACIJA I KONTROLA)

III PRISTUP PODACIMA


11. RAD SA FAJLOVIMA
12. LINQ

1
Nastanak C#

C# je jednostavan objektno-orijentisan programski jezik opte namene. Razvio ga je Microsof


tim koji je vodio Andres Hejlsberg. Poslednja verzija C# je 4.0 koja je zavrena 12. Aprila
2010. god. Prva verzija (C# 1.0) se pojavila 2001.godine, pa su se ubrzo pojavljivale nove
verzije ovog programskog jezika. Poto je naslednik C i C++ jezika, dobio je ime sharp po
inspiraciji muzike notacije i znai da se napisana nota izvodi za pola koraka vie. C# je
naprednija verzija C++ (C++++). Fajlovi pisani u ovom jeziku imaju ekstenziju cs.

ta je .NET Framework?

NET Framework je revulucionarna platofrma koju je kreirao Microsoft za razvoj aplikacija.


To je takva platforma na kojoj mogu raditi razliite vrste aplikacija (Windows aplikacije, Web
aplikacije, Web servisi...). NET Framework je dizajniran tako da moe koristiti bilo koji
programski jezik kao to su C++, Visual Basic, Jscript, ak i ranije verzije Cobol. Takoe je
mogue da se kombinuju pojedini delovi koda iz razliitih programskih jezika. Npr. kod
napisan u C# se moe kombinovati sa kodom iz Visual Basica.
NET Framework sadri veliku biblioteku koda koji moe da koristi klijentski jezik (kao to je
C#) koristei tehnike objektno-orijentisanog programiranja. Ova biblioteka se sastoji od
razliitih modula, pri emu je mogue koristiti pojedine delove u zavisnosti od potrebe. Tako
npr. neki moduli sadre blokove za kreiranje windows aplikacija, drugi deo za mreno
programiranje, a neki drui za Web razvoj. Neki moduli su podeljeni u neke specifinije pod
module.

Objektno - orijentisano programiranje (Klase, objekti i metode)

Objekat je primerak (instanca) klase. Klasa predstavlja skup podataka i instrukcija koje se
izvode na nekim podacima. Klasa je skup pravila koji odreuju kako e se formirati neki
objekat. Svaka klasa ima svoje lanove i to su podaci i kod. Podaci koji se definiu u klasi
obino se nazivaju polja (fields). Ovde se koriste termini kao to su funkcija (metoda) koja
predstavlja kod programa koji se izvrava nad podacima. Metodi su ustvari podprogrami i oni
mogu imati svojstva, dogaaje i konstruktore. Metodi se izvravaju nad poljima koja su
definisana u klasi.

Kljune rei u C#

abstract as base bool


break byte case catch
char checked class const
continue decimal default delegate
do double else enum
event explicit extern false
finally fixed float for
foreach goto if implicit
in in (generic modifier) int interface
internal is lock long
namespace new null object
operator out out (generic modifier) override
params private protected public
readonly ref return sbyte

2
sealed short sizeof stackalloc
static string struct switch
this throw true try
typeof uint ulong unchecked
unsafe ushort using virtual
void volatile while

Kreiranje konzolnih aplikacija u Microsoft Visual C# 2010 Express

Na slici 1 je prikazana startna strana, na kojoj se mogu odabrati ponuene mogunosti za


formiranje novog projekta izborom opcije New Project ili otvaranje ve postojeeg projekta
izborom opcije Open Project.

Slika 1. Izgled startnog prozora Microsoft Visual C# 2010 Express

Pri kreiranju konzolne aplikacije izabere se opcija sa padajueg menija FileNew Project.
Zatim se u okviru panela Templates izabere Console Application. Potom se dobija sledee:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
}
}
}

3
Da bi aplikacija bilo ta radila potrebno je dodati bar jednu liniju koda ispod glavne funkcije
static void Main(string[] args).

Primer 1. Ispisati tekst na ekranu.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Prva aplikacija kod C# proogramiranja!");
Console.ReadKey();/*trai se pritiskanje nekog tastera za prekid rada programa*/
}
}
}

namespace predstavlja .NET nain da se kod i njegov sadraj jedinstveno identifikuju.


Takoe se koristi za kategorizaciju elemenata u .NET Framework. namespace je deklarisan za
kod aplikacije koja se u ovom sluaju naziva ConsoleApplication1.
using System;-predstavlja korienje System namespace (odnosi se na biblioteku klasa .NET
Framework, iju biblioteku koristi C#). Za vee projekte moe se kreirati sopstveni
namespaces.
class Primer{ -definicija klase Primer. Poetak klase poinje sa otvorenom vitiastom
zagradom {, a zavrava se sa }.
static void Main()-poinje glavni metod, gde se izvrava program. Ovaj metod poinje sa
static, to znai da je statiki i void - ne vraa vrednost.
Console.WriteLine("Jednostavan C# program."); -WriteLine() je funkcija koji kao rezultat
vraa string koji mu je prosleen. Console- podrava konzolni I/O. U kombinaciji se
kompajleru govori da je WriteLine() lanica Console klase.
Izrazi u C# se zvravaju sa taka-zarezom (;).
Console.ReadKey(); - funkcija za unos nekog znaka sa tastature (za prekid rada programa)

Ovaj program se unosi izborom opcije New Project, pa se bira u okviru Online Template
opcija Empty Project. Na padajuem meniju se izabere opcija Build Build Solution (F6), a
potom sa padajueg menija Debug Start Without Debugging. (Ukoliko je u padajuem
meniju ne postoje ove opcije treba izabrati opciju Tools Settings Expert Settings).
Ukoliko se fajl ne snimi pod nekim imenom, dodeljuje mu se automatski ime CodeFile1.cs.
Naravno, postoji mogunost preimenovanja.
Pri izvravanju aplikacije pojavie se u komand propmptu tekstualna poruka:
Jednostavan C# program.

Primer 2. Napisati konzolnu aplikaciju za unos i sabiranje dva cela broja.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

4
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int prvi, drugi, rezultat;
string string1, string2;
Console.WriteLine("Uneti prvi broj ");
string1 = Console.ReadLine();
prvi = int.Parse(string1);
Console.WriteLine("Uneti drugi broj ");
string2 = Console.ReadLine();
drugi = int.Parse(string2);
rezultat = prvi + drugi;
Console.WriteLine("Rezultat sabiranja je: ");
Console.WriteLine(prvi + " + " + drugi + " = " + rezultat);
Console.ReadKey();
}
}
}

Komentari

Komentari se koriste da bi aplikaciju razumeli oni koji ne znaju ta taj program radi. Moe se
odnositi na vie linija koda ili na jednu liniju. Zbog toga se koriste komentari za blokove ili
linijski komentari. Komentari za blok instrukcija se piu tako to poinju sa "/*" nakon ega
sledi tekst komentara, a zavravaju se sa"*/". Ovakvi komentari se obino piu u vie redova.
Ukoliko se komenar pie u jednom redu, on poinje sa "//" a zavrava se sa enterom. Osnovna
njihova namena je da objasne deo koda koji se nalazi u toj liniji, pa se zato nazivaju linijski
komentari. Komentari u C# su obino obojeni zeleno.

Primer 3. Primena komentara u konzolnoj aplikciji.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double prviBroj, drugiBroj;//realne promenljive
string korisnickoIme;//string koji se unosi
Console.WriteLine("Unesi svoje ime:");
korisnickoIme = Console.ReadLine();/* sa metodom ReadLine() se unosi prvi string koji
ne stoji kao argument*/
Console.WriteLine("Zdravo {0}!", korisnickoIme);/* {0} oznacava mesto gde ce se
stampati sadraj promenljive korisnickoIme*/
Console.WriteLine("Unesi prvi broj:");
prviBroj = Convert.ToDouble(Console.ReadLine());/*konvertuje string u double tip */
Console.WriteLine("Unesi drugi broj");
drugiBroj = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Zbir broja {0} i {1} je {2}.", prviBroj,
drugiBroj, prviBroj + drugiBroj);/*sa {0}, {1} i {2} su predstavljena mesta za tri
promenljive*/
Console.WriteLine("Razlika {0} i {1} je {2}.",

5
drugiBroj, prviBroj, prviBroj - drugiBroj);
Console.WriteLine("Proizvod {0} i {1} je {2}.", prviBroj,
drugiBroj, prviBroj * drugiBroj);
Console.WriteLine("Kolicnik {0} i {1} je {2}.",
prviBroj, drugiBroj, prviBroj / drugiBroj);
Console.WriteLine("Ostatak deljenja {0} i {1} je {2}.",
prviBroj, drugiBroj, prviBroj % drugiBroj);
Console.ReadKey();
}
}
}

Promenljive i tipovi podataka

Promenljive se moraju na poetku deklarisati pre upotreba. Tipovi podataka u C# su dati u


tabeli 1.

Tabela 1. Tipovi podataka u C#


Tip Znaenje
bool Predstavlja true/false vrednosti
byte 8-bitni pozitivna celobrojna vrednost
char Znakovne vrednosti
decimal Numeriki tip vrednosti za finansijske obraune
double Realne vrednosti dvostruke preciznosti
float Realne vrednosti
int Celobrojne vrednosti (32 bitne)
long Celobrojne vrednosti veeg opsega (64 bitne)
sbyte 8-bitna celobrojna oznaena (+ i -) vrednost
short 16-bitna celobrojna vrednost
uint Neoznaena celobrojna vrednost
ulong Neoznaena celobrojna vrednost veeg opsega
ushort Neoznaena celobrojna vrednost manjeg opsega

Operatori mogu biti:


unarni - izvravaju se na jednom operandu (promenljivoj)
binarni - koriste se u kombinaciji sa dva operanda
tenarni - koristi se u kombinaciji sa tri operanda (kondicionalni operator a:b?c)

Konvertovanje promenljivih

Tipovi konverzije promenljivih mogu biti:


Implicitna konverzija-konverzija iz tipa I u tip II je mogua u svim sluajevima, i pravila
izvoenja konverzije su jednostavna.
Eksplicitna konverzija-konverzija iz tipa I u tip II je mogua samo u odreenim sluajevima
ili su pravila za konverziju prilino komplikovana.

Tabela 2. Implicitna konverzija tipova u C#


Tip Konverzija
sbyte short, int, long, float, double ili decimal
byte short, ushort, int, uint, long, ulong, float, double ili decimal
short int, long, float, double ili decimal

6
ushort int, uint, long, ulong, float, double ili decimal
int long, float, double ili decimal
uint long, ulong, float, double ili decimal
long float, double ili decimal
char ushort, int, uint, long, ulong, float, double ili decimal
float double
ulong float, double ili decimal

Tabela 3. Eksplicitna konverzija tipova u C#


Tip Konverzija
sbyte byte, ushort, uint, ulong ili char
byte sbyte ili char
short sbyte, byte, ushort, uint, ulong ili char
ushort sbyte, byte, short ili char
int sbyte, byte, short, ushort, uint, ulong ili char
uint sbyte, byte, short, ushort, int ili char
long sbyte, byte, short, ushort, int, uint, ulong ili char
ulong sbyte, byte, short, ushort, int, uint, long ili char
char sbyte, byte ili short
float sbyte, byte, short, ushort, int, uint, long, ulong, char ili decimal
double sbyte, byte, short, ushort, int, uint, long, ulong, char, float ili decimal
decimal sbyte, byte, short, ushort, int, uint, long, ulong, char, float ili double

7
Tabela 4. Funkcije u C# za eksplicitnu konverziju
Funkcija Objanjenje
Convert.ToBoolean(argument) argument konvertuje u bool
Convert.ToByte(argument) argument konvertuje u byte
Convert.ToChar(argument) argument konvertuje u char
Convert.ToDecimal(argument) argument konvertuje u decimal
Convert.ToDouble(argument) argument konvertuje u double
Convert.ToInt16(argument) argument konvertuje u short
Convert.ToInt32(argument) argument konvertuje u int
Convert.ToInt64(argument) argument konvertuje u long
Convert.ToSByte(argument) argument konvertuje u sbyte
Convert.ToSingle(argument) argument konvertuje u float
Convert.ToString(argument) argument konvertuje u string
Convert.ToUInt16(argument) argument konvertuje u ushort
Convert.ToUInt32(argument) argument konvertuje u uint
Convert.ToUInt64(argument) argument konvertuje u ulong

Kontrola toka programa

goto

goto izraz se koristi kada je neophodno da se preskoi neki deo koda ili da se vrati na
prethodni. Programska linija se na neki nain obelei (slovima ili brojevima) i navede goto
slovo/broj. On ima svoje prednosti i nedostatke. Prednost je u jednostavnom prelasku sa
jednog dela koda na drugi, a nedostatak to se moe dobiti kod koji je teko razumljiv.

Uslovi (grananje) u programu

Kao kod C programskog jezika, moe se koristiti jednostruko grananje


if (uslov)
{
// Nesto se radi
}
ili viestruko
if (uslov1)
{
// Radi neto
}
else
{
if (uslov2)
{
// Radi neto drugo
}
else
{
if (uslov3)
{
// Radi neto drugo
}
else
{
// Radi neto drugo

8
}
}
}

switch izraz

switch (operand)
{
case operand1:
kod za izvrsavanje;
break;
case operand2:
kod za izvrsavanje;
break;
...
case operandN:
kod za izvrsavanje;
break;
default:
kod za izvrsavanje ako ni jedan uslov nije ispunjen;
break;
}

Ciklusi

for ciklus

Opti oblik for ciklusa je:


for(inicijalizacija; uslov; iteracija)
izraz;
Opti oblik for ciklusa koji ima oblik izraza koji treba da se izvre:
for(inicijalizacija; uslov; iteracija)
{
niz izraza;
}

Primer 4. Napisati konzolnu aplikaciju za unos broja i odreivanje sume brojeva od 1 do


unetog broja i faktorijela tog broja.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class MainClass
{
public static void Main()
{
int n, sum = 0;
int fact = 1;
Console.WriteLine("Uneti broj do koga se vrsi sabiranje (odredjuje faktorijel) ");
n = Convert.ToInt32(Console.ReadLine());
for (int i = 1; i <= n; i++)
{
sum += i; // i je pomocna primenljiva
fact *= i;
}

9
Console.WriteLine("Suma brojeva od 1 do {0} je {1} ",n, sum);
Console.WriteLine("Faktorijel je " + fact);
}
}
}

while ciklus

Ovaj ciklus se koristi u sluaju kada je nepoznat broj iteracija (ponavljanja) ciklusa. Opti
oblik while ciklusa je:
while(uslov) izraz;

Primer 5. Napisati konzolnu aplikaciju za unos nekog celog broja i ispisivanje stepena od 1
do n zadatog broja.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class MainClass
{
public static void Main()
{
int i, e, n, broj;
int rezultat;
Console.WriteLine("Uneti broj ciji se stepen trazi ");
broj = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Uneti stepen koji se trazi ");
n = Convert.ToInt32(Console.ReadLine());
for (i = 0; i < n; i++)
{
rezultat = 1;
e = i;

while (e > 0)
{
rezultat *= broj;
e--;
}

Console.WriteLine(broj + " na " + i + " je " + rezultat);


}
}
}
}

do while ciklus

do-while ciklus se mora izvriti bar jednom. Opti oblik ovog ciklusa je:
do {
izrazi;
} while(uslov);

10
Primer 6. Napisati konzolnu aplikaciju na primeru prorauna broja godina do koje treba
odreeni ulog banke da naraste.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double ulog, kamatnaStopa, krajnjiUlog;
Console.WriteLine("Koliki je vas ulog u banci?");
ulog = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Kolika je kamatna stopa (u %)?");
kamatnaStopa = 1 + Convert.ToDouble(Console.ReadLine()) / 100.0;
Console.WriteLine("Do koje vrednosti uloga zelite da dodjete?");
krajnjiUlog = Convert.ToDouble(Console.ReadLine());
int ukupnoGodina = 0;
do
{
ulog *= kamatnaStopa;
++ukupnoGodina;
}
while (ulog < krajnjiUlog);
Console.WriteLine("Za {0} god. ulog ce dostici {1}.",ukupnoGodina, ulog);
Console.ReadKey();
}
}
}

Primer 7. Napisati konzolnu aplikaciju za unos celog broja i ispisivanje tog broja u
inverznom poretku.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class MainClass
{
public static void Main()
{
int broj;
int sledecibroj;

Console.WriteLine("Uneti broj");
broj = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Uneti broj je: " + broj);
Console.Write("Broj u inverznom poretku je: ");

do
{
sledecibroj = broj % 10;
Console.Write(sledecibroj);
broj = broj / 10;
} while (broj > 0);

11
Console.WriteLine();
}
}
}

foreach ciklus

foreach ciklus se koristi za adresiranje svakog elemena u nizu koristei sledeu sintaksu:
foreach (<osnovni tip> <ime> in <niz>)
{
moe se koristi <ime> za svaki element
}

Ovaj ciklus ide kroz svaku promenljivu i postavlja je u promenljivu <ime>. Ne mora se voditi
rauna koliko je elemenata u nizu npr.:

Primer 8. Napisati konzolnu aplikaciju za primenu foreach ciklusa..

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ciklusi
{
class Program
{
static void Main(string[] args)
{
string[] imenaGlumaca = { "Matthew McConaughey", "Brus Willis", "Al Pacino"};
Console.WriteLine("Ovo su {0} moja omiljena glumca:", imenaGlumaca.Length);
foreach (string imeGlumca in imenaGlumaca)
{
Console.WriteLine(imeGlumca);
}
Console.ReadKey();
}
}
}

Funkcije

Kada je re o funkcijama prvo treba objasniti funkciju Main(). Ova funkcija kao rezultat vraa
void ili int, a moe se ukljuiti string[] args parametar, pa su mogue sledee verzije ove
funkcije:
static void Main()
static void Main(string[] args)
static int Main()
static int Main(string[] args)

Opcionalni parametar args u Main() funkciji obezbeuje nain za dobijanje informacija izvan
aplikacije.
Funkcije u C# predstavljaju blokove koda koji se mogu izvravati u bilo kom delu aplikacije.
Kod OOP funkcije se nazivaju metode, ali taj termin e se kasnije koristiti kod klasa. Tako na

12
primer, ako se u trai ispis nekog teksta, moe se pozvati funkcija u bilo kom delu aplikacije,
a dovoljno je samo jednom da se napie. Funkcije utiu na itljivost koda.

Definicija i poziv funkcije

Funkcije se mogu smestiti ili pre ili posle glavne funkcije Main(), a mogu biti sa ili bez
argumenata. Argumenti funkcije se navode u zaglavlju funkcije, iza ega se dalje pie telo
funkcije (ono to funkcija treba da uradi). Funkcija se poziva u glavnom programu
navoenjem imena funkcije i eventualno prosleivanjem parametara.

Primer 9. Napisati konzolnu aplikaciju za formiranje funkcije Pisi() i pozivanje funkcije u


glavnom programu.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FunkcijaZaIspisTeksta
{
class Program
{
//Definicija funkcije Pisi()
static void Pisi()
{
Console.WriteLine("Ovo je tekst");
}
static void Main(string[] args)
{
Pisi();//poziv funkcije Pisi()
Console.ReadKey();
}
}
}

Primer 10. Napisati konzolnu aplikaciju za formiranje funkcije Osoba(imena) i pozivanje


funkcije u glavnom programu.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Funkcija
{
class Program
{
static void Main(string[] args)
{
Osoba("Ana");
Osoba("Marija", "Marko", "Nikola");
Console.ReadKey();
}

static void Osoba(params string[] imena)


{
foreach (string ime in imena)
Console.WriteLine("Hello, " + ime);
}

13
}
}

14

You might also like