You are on page 1of 14

C#

SADRŽAJ VEŽBI
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. NASLEĐIVANJE, POLIMORFIZAM
8. DODATNE TEHNIKE OOP

II WINDOWS PROGRAMIRANJE
9. OSNOVNO WINDOWS PROGRAMIRANJE (DUGMIĆI, 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 opšte namene. Razvio ga je Microsof


tim koji je vodio Andres Hejlsberg. Poslednja verzija C# je 4.0 koja je završena 12. Aprila
2010. god. Prva verzija (C# 1.0) se pojavila 2001.godine, pa su se ubrzo pojavljivale nove
verzije ovog programskog jezika. Pošto je naslednik C i C++ jezika, dobio je ime sharp po
inspiraciji muzičke notacije i znači da se napisana nota izvodi za pola koraka više. 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 različite vrste aplikacija (Windows aplikacije, Web
aplikacije, Web servisi...). NET Framework je dizajniran tako da može koristiti bilo koji
programski jezik kao što su C++, Visual Basic, Jscript, čak i ranije verzije Cobol. Takođe je
moguće da se kombinuju pojedini delovi koda iz različitih programskih jezika. Npr. kod
napisan u C# se može kombinovati sa kodom iz Visual Basica.
NET Framework sadrži veliku biblioteku koda koji može da koristi klijentski jezik (kao što je
C#) koristeći tehnike objektno-orijentisanog programiranja. Ova biblioteka se sastoji od
različitih modula, pri čemu je moguće koristiti pojedine delove u zavisnosti od potrebe. Tako
npr. neki moduli sadrže blokove za kreiranje windows aplikacija, drugi deo za mrežno
programiranje, a neki drui za Web razvoj. Neki moduli su podeljeni u neke specifičnije 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 određuju kako će se formirati neki
objekat. Svaka klasa ima svoje članove i to su podaci i kod. Podaci koji se definišu u klasi
obično se nazivaju polja (fields). Ovde se koriste termini kao što su funkcija (metoda) koja
predstavlja kod programa koji se izvršava nad podacima. Metodi su ustvari podprogrami i oni
mogu imati svojstva, događaje i konstruktore. Metodi se izvršavaju nad poljima koja su
definisana u klasi.

Ključne reči u C#

2
Kreiranje konzolnih aplikacija u Microsoft Visual C# 2010 Express

Na slici 1 je prikazana startna strana, na kojoj se mogu odabrati ponuđene mogućnosti za


formiranje novog projekta izborom opcije New Project ili otvaranje već postojećeg projekta
izborom opcije Open Project.

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

Pri kreiranju konzolne aplikacije izabere se opcija sa padajućeg menija File→New Project.
Zatim se u okviru panela Templates izabere Console Application. Potom se dobija sledeće:

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();/*traži se pritiskanje nekog tastera za prekid rada
programa*/
}
}
}

namespace predstavlja .NET način da se kod i njegov sadržaj jedinstveno identifikuju. Takođe
se koristi za kategorizaciju elemenata u .NET Framework. namespace je deklarisan za kod
aplikacije koja se u ovom slučaju naziva ConsoleApplication1.
using System;-predstavlja korišćenje System namespace (odnosi se na biblioteku klasa .NET
Framework, čiju biblioteku koristi C#). Za veće projekte može se kreirati sopstveni
namespaces.
class Primer{ -definicija klase Primer. Početak klase počinje sa otvorenom vitičastom
zagradom {, a završava se sa }.
static void Main()-počinje glavni metod, gde se izvršava program. Ovaj metod počinje sa
static, što znači da je statički i void - ne vraća vrednost.
Console.WriteLine("Jednostavan C# program."); -WriteLine() je funkcija koji kao rezultat
vraća string koji mu je prosleđen. Console- podržava konzolni I/O. U kombinaciji se
kompajleru govori da je WriteLine() članica Console klase.
Izrazi u C# se zvršavaju sa tačka-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 padajućem meniju se izabere opcija Build →Build Solution (F6), a
potom sa padajućeg menija Debug → Start Without Debugging. (Ukoliko je u padajućem
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 mogućnost preimenovanja.
Pri izvršavanju aplikacije pojaviće 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;

4
using System.Text;

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. Može se
odnositi na više linija koda ili na jednu liniju. Zbog toga se koriste komentari za blokove ili
linijski komentari. Komentari za blok instrukcija se pišu tako što počinju sa "/*" nakon čega
sledi tekst komentara, a završavaju se sa"*/". Ovakvi komentari se obično pišu u više redova.
Ukoliko se komenar piše u jednom redu, on počinje sa "//" a završava 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 obično 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 sadržaj 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());

5
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}.",
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 početku deklarisati pre upotreba. Tipovi podataka u C# su dati u


tabeli 1.

Tabela 1. Tipovi podataka u C#


Tip Značenje
bool Predstavlja true/false vrednosti
byte 8-bitni pozitivna celobrojna vrednost
char Znakovne vrednosti
decimal Numerički tip vrednosti za finansijske obračune
double Realne vrednosti dvostruke preciznosti
float Realne vrednosti
int Celobrojne vrednosti (32 bitne)
long Celobrojne vrednosti većeg opsega (64 bitne)
sbyte 8-bitna celobrojna označena (+ i -) vrednost
short 16-bitna celobrojna vrednost
uint Neoznačena celobrojna vrednost
ulong Neoznačena celobrojna vrednost većeg opsega
ushort Neoznačena celobrojna vrednost manjeg opsega

Operatori mogu biti:


unarni - izvršavaju 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 moguća u svim slučajevima, i pravila
izvođenja konverzije su jednostavna.
Eksplicitna konverzija-konverzija iz tipa I u tip II je moguća samo u određenim slučajevima
ili su pravila za konverziju prilično komplikovana.

Tabela 2. Implicitna konverzija tipova u C#


Tip Konverzija

6
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
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 Objašnjenje
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 preskoči neki deo koda ili da se vrati na
prethodni. Programska linija se na neki način obeleži (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 može dobiti kod koji je teško razumljiv.

Uslovi (grananje) u programu

Kao kod C programskog jezika, može se koristiti jednostruko grananje


if (uslov)
{
// Nesto se radi
}
ili višestruko
if (uslov1)
{
// Radi nešto
}
else
{
if (uslov2)
{
// Radi nešto drugo
}
else
{
if (uslov3)
{
// Radi nešto drugo
}
else
{
// Radi nešto 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

Opšti oblik for ciklusa je:


for(inicijalizacija; uslov; iteracija) 
        izraz;
Opšti oblik for ciklusa koji ima oblik izraza koji treba da se izvrše:
for(inicijalizacija; uslov; iteracija)  
{
    niz izraza; 
}

Primer 4. Napisati konzolnu aplikaciju za unos broja i određivanje 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 slučaju kada je nepoznat broj iteracija (ponavljanja) ciklusa. Opšti
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 izvršiti bar jednom. Opšti oblik ovog ciklusa je:
do {
izrazi;
} while(uslov);

10
Primer 6. Napisati konzolnu aplikaciju na primeru proračuna broja godina do koje treba
određeni 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;

11
} while (broj > 0);

Console.WriteLine();
}
}
}

foreach ciklus

foreach ciklus se koristi za adresiranje svakog elemena u nizu koristeći sledeću sintaksu:
foreach (<osnovni tip> <ime> in <niz>)
{
može se koristi <ime> za svaki element
}

Ovaj ciklus ide kroz svaku promenljivu i postavlja je u promenljivu <ime>. Ne mora se voditi
računa 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 vraća
void ili int, a može se uključiti string[] args parametar, pa su moguće sledeće 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 obezbeđuje način za dobijanje informacija izvan
aplikacije.

12
Funkcije u C# predstavljaju blokove koda koji se mogu izvršavati u bilo kom delu aplikacije.
Kod OOP funkcije se nazivaju metode, ali taj termin će se kasnije koristiti kod klasa. Tako na
primer, ako se u traži ispis nekog teksta, može se pozvati funkcija u bilo kom delu aplikacije,
a dovoljno je samo jednom da se napiše. Funkcije utiču 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 piše telo
funkcije (ono što funkcija treba da uradi). Funkcija se poziva u glavnom programu
navođenjem imena funkcije i eventualno prosleđivanjem 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)


{

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

14

You might also like