Strukture c#

  • 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