Upload
salasko
View
76
Download
0
Embed Size (px)
DESCRIPTION
sharp
Citation preview
Osnoveprogramskog
jezika C#as 4.
1
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.
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
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 nulePoint p2 = new Point(2,2); // p2.x, p2.y su 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 callq.MoveTo(60, 20);
Point point; // IDENTINO SAPoint 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.
4
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.
5
System.String ili samo string
Povezivanje vie stringova operatorom +: "Don " + s
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 (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...
6
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; }
}
UseRectangle 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 StructReferencni 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 klaseobject)
Ne moe da nasleuje
(ali kompatibilna sa klasom object)
Mogu implementirati interfejse Mogu implementirati interfejse
Mogu imati destruktor Ne mogu imati destruktor
8
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.
9
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
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