Sie sind auf Seite 1von 34

Osnove

programskog
jezika C#
as 4.

Strukture u C#

1. VREDNOSNI TIP

Kako se pie jedna struktura u odnosu na klasu?

Velika slinost.

Umseto kljune rei class sledi struct

Struktura moe da sadri polja i metode kao i klasa.

struct Point
{
public int x;
public int y;
public Point(int x1, int y1)
{
x = x1;
y = y1;
}
}
Point p1; // p1.x, p1.y su nule
Point p2 = new Point(2,2); // p2.x, p2.y su 2

Prilikom deklaracije se ujedno formira i njena instanca jer je


vrednosnog tipa. Pri kreiranju objekta tj. Instance nije
neophodno da se koristi operator new, ali nije ni zabranjeno
upotrebiti ga. Pozivom ovog operatora definie se metoda za
inicijalizaciju vrednosti tj. odreuje se poziv konstruktora.
(Instanca strukture se formira na steku i ne moe se
preusmeriti na dinamiku memoriju upotrebom new
operatora.)
2

Strukture u C#: Primer


struct Point
{
public int x, y;
Point (Point p) { x = p.x; y = p.y; }
void MoveTo (int a, int b) { x = a; y = b; }
}

Point p = new Point(3, 4);


Point q;
p.MoveTo(10, 20);// method call
q.MoveTo(60, 20);

Point point; // IDENTINO SA


Point point = new Point();
3

Strukture u C#

Izvedene su iz klase Object (kao int), ali ne mogu se


koristiti kao roditeljske klase za druge strukture
odnosno klase. Znai, struktura ne sme da nasleuje
druge strukture ili klase.

Nasleivanje interfejsa je dozvoljeno ali sa obavezom


da se realizuju deklarisane metode u interfejsu.
(Kasnije e biti raeni interfejsi)

Dodatna literatura: C# kroz praktine primere, Charles


Wright, The McGraw-Hill Companiews, Osborne.

Upotreba kljune rei this

Oznaava korienje objekta iste klase u kojoj se


koristi.

Najee ga koristi jer inicira pomo u pisanju koda i


nije neophodan.

Na primer: U prethodnom primeru se moe napisati


konsturuktor na sledei nain:

Point (Point p) { this.x = p.x; this.y = p.y; }

Nekada je neophodan. Ako se pie metoda iji


argument objekat koji se koristi.

System.String ili samo string

Povezivanje vie stringova operatorom +:

Indeksiranjem dobija se vrednost karaktera na poziciji: s[i]

Svojsvto Length daje duinu stringa: s.Length

Referencni tip podataka

Ali zbog specifinosti tipa, usaglaavanja sa C sintaksom i pozitivnih


iskustava, napravljeni su izuzeci.

1.

Nije neophodno pozivanje eksplicitnog konstrukrora pri inicijalizaciji


stringa: string s = perica;

2.

Vrednosti se mogu porediti neposredno: s==perica

"Don " + s

(dva stringa su jednaka, ==, ako imaju iste karaktere na svim pozicijama ili su null oba)

Klasa String definie mnoge korisne operacije nad stringovima (metode)

CompareTo, IndexOf, StartsWith, Substring, Replace...

Primer jedne klase u C#


sline strukturi

Deklaracija
class Rectangle
{
Point origin;
public int width, height;
public Rectangle() { origin = new Point(0,0); width = height = 0; }
public Rectangle (Point p, int w, int h) { origin = p; width = w; height = h; }
public void MoveTo (Point p) { origin = p; }

Use
Rectangle r = new Rectangle(new Point(10, 20), 5, 5);
int area = r.width * r.height;
r.MoveTo(new Point(3, 3));
7

Razlike izmeu klase i strukture


Class

Struct

Referencni tip
(objekti tj instance klase se
skladite u din. mem. tj. heap-u)

Vrednosni tip
(objekti se uvaju na steku)

Moe da nasleuje
(sve klase su izvedene iz klase
object)

Ne moe da nasleuje

Mogu implementirati interfejse

Mogu implementirati interfejse

Mogu imati destruktor

Ne mogu imati destruktor

(ali kompatibilna sa klasom object)

Dostupnost tj. mogunost


pristupa

public Pristup bez ogranienja.

protected Mogu pristup u istoj klasi i klasama


izvedenim od te klase.

internal - Access limited to this program

protected internal - Access limited to this program or


types derived from the containing class

private Mogu pristup samo u istoj klasi.

Nabrojive liste

Enumeratori ili nabrojive liste

Vrednosni tip podataka

Sintaksa:
enum NAZIV
{ vrednost1, vrednost2, vrednostN };

10

11

Primer 2.
enum Color {red, blue, green} // values: 0, 1, 2
enum Access {personal=1, group=2, all=3}
enum Access1 : byte {personal=1, group=2,
all=3}
Color c = Color.blue;
a = Access.personal | Access.group;
if ((Access.personal & a) != 0)
Console.WriteLine("access granted");
12

Operacije na nabrojivim listama

Poreenje:

if (c == Color.red) ...

if (c > Color.red && c <= Color.green) ...

Operatori: +, -, ++, --, &, |, ~

c = c + 2;

c++;

if ((c & Color.red) == 0) ...

c = c | Color.blue;

c = ~ Color.red;

Kompajler ne proverava da li rezultat ima validnu vrednost.

Enumeratori ne mogu biti pridrueni celobrojnim vrednostima osim ako


postoji eksplicitno kastovanje.

Enumeratori nasledjuju object, sledi da poseduju (Equals, ToString, ...).

13
Class System.Enum omoguuje operacije nad ovim podacima
kao na
primer (GetName, Format, GetValues, ...).

Primer 3.
enum Temperatures
{
WickedCold = 0,
FreezingPoint = 32,
LightJacketWeather = 60,
SwimmingWeather = 72,
BoilingPoint = 212,
}
static void Main()
{
System.Console.WriteLine( "Freezing point of water: {0}",
( int ) Temperatures.FreezingPoint );
System.Console.WriteLine( "Boiling point of water: {0}",
( int ) Temperatures.BoilingPoint );
}
14

Prostori imena

Prostori imena u vie


fajlova formiraju
zajedniki deklaracioni
prostor.

Prostor imena koji je


deklarisan u nekom
postojeem konstituie
sopstveni prostor imena.

15

Upotreba drugih prostora


imena

Strani prostor imena mora biti ili importovan koristei kljunu re


using ProstorImena ili se pri navoenju klase mora navesti cela
putanja tj. puno ime klase.
16

Globalni (neimenovan) prostor imena

Svaki C# program ukljuuje najmanje jedan, globalan


ili neimenovan prostor imena (kao kod C++).

Klase mogu imati isto ime ako ne pripadaju istom


imenskom prostoru.

17

Neimenovan prostor imena je prisutan


ako ne postoji definisani:
//namespace prazanProjekat
//{
class klasa1
{
public static void Main()
{
Console.WriteLine("Test");
}
}
//}
18

klasa1 u globalnom ili


definisanom prostoru imena

19

Par osvrta na ve
spomenuto...

20

Metoda Main:

public static void Main() { //... }

public static int Main() { //... return 0; }

Moe postojati samo jedna ulazna taka za program.

21

Pretprocesorske direktive u
C#

C# prevodilac nema pretprocesor kao u C ili C++ koji bi


itao izvorne datoteke i menjao ih pre prevoenja.

Znaenje nekih direktiva je izmenjeno:

#define PI 3.14159 // bilo bi ispravno u C++-u ali ne i u C#


gde je definisanje mogue ali i ne dodele vrednosti...

Sledi tabela sa detaljnijim opisom znaenja

22

Pretprocesorske komande
Pretproc. komande Znaenje
#if, #else, #elif, #endif

Uslovno prevoenje

#define, #undef

Definisanje i ponitavanje
definicije. Nema pridruivanja
vrednosti

#warning

Daje upozorenje posle prevoenja

#error

Daje greku posle prevoenja

#line

Menja broja redova

#region,#endregion

Skrivanje dela koda

23

Prevoenje uz zadavanje
komandi

24

25

Nesiguran kod

U C# uglavnom nema potrebe za korienjem


pointera/pokazivaa, osim...

Ako se poivaju funkcije C++ bibilioteke iji su parametri


pokazivai na promenljivu.

Upotreba pokazivaa ponekada poveava efikasnost.

26

unsafe

Mehanizam korienja pokazivaa u C# zahteva


upotrebu rezervisane rei unsafe.

est primer upotrebe pokazivaa je pri kopiranju nizova


zbog dobitka na brzini izvravanja.

27

Primer:

unsafe public static bool copyarr(int[] b, int[] a, int len)


{

if (len > b.Length || len > a.Length)

{
return false;

//fiksira se memorijski polozaj promenljivih

fixed (int* A = a, B = b)

int* pA = A;

int* pB = B;

for (int n = 0; n < len; n++)


*pB++ = *pA++;

return true;

}
28

fixed

fixed je jedino dozvoljeno u unsafe kodu

Postavlja pokaziva na promenljivu koja je .NET tipa


(managed) i ne dozvoljava promenu lokacije te
promenljive u bloku fixed. Bez ovog fiksiranje, objekat
moe promeniti mesto i time bi pokaziva izgubio
smisao.

29

Podeavanje prevodioca

30

Windows aplikacije

1. Kako od konzolne aplikacije do Windows aplikacije?

Nova referenca u projektu za korscenje Windows.Forms


biblioteke

2. Korienje projekta tipa Windows application

Nasleivanje na delu

Dodavanje svojstva koristei


IDE

Koristei pogled na klase


ClassView mogue je iz
IDE dodati bilo koji
element klasi pa i
svojstvo.

33

Upotreba svojstava kod Windows


formi odnosno kontrola

Location

Size

Text

BackColor

......................

34

Das könnte Ihnen auch gefallen