Limbajul c sharp



Yüklə 1,48 Mb.
səhifə2/14
tarix08.01.2019
ölçüsü1,48 Mb.
#92362
1   2   3   4   5   6   7   8   9   ...   14

namespace FunctiileMele

{

public class Adunare



{

public static long Add(long i,long j)

{

return(i+j);



}

}

}



Salvati fila cu numele Adunare.cs.

pentru o operatie de inmultire,editati un modul de genul:

using System;

namespace FunctiileMele {

public class Inmultire {

public static long Multiply(long x,long y) { return (x*y); }

}

}

Salvati fila cu numele Produs.cs.Observati ca ambele file declara si



un spatiu denumit (namespace) ce va fi utilizat ca identificator.

-7-


In continuare,cele doua functii pot fi incluse intr-o fila DLL cu o

astfel de comanda:

csc /target:library /out:FunctiileMele.DLL Adunare.cs Produs.cs

Observati ca in directorul curent a fost asamblata fila:

FunctiileMele.DLL 0.0.0.0

In continuare,aceasta biblioteca va putea fi apelata la fel ca orice

alta biblioteca DLL.Sa presupunem ca doriti sa scrieti un mic modul,in

care se aplica ambele functii,pentru doi parametri inclusi in linia de

comanda.Editati un program de genul:

using System;

using FunctiileMele;

class Operatie1 {

public static void Main( string[] args) {

if (args.Length != 2) {

Console.WriteLine("Comanda este: Operatie1 ");

return;


}

long num1 = long.Parse(args[0]);

long num2 = long.Parse(args[1]);

long sum = Adunare.Add(num1,num2);

long product = Inmultire.Multiply(num1,num2);

Console.WriteLine("Suma dintre {0} si {1} este {2}",

num1,num2,sum);

Console.WriteLine("Produsul dintre {0} si {1} este {2}",

num1,num2,product);

}

}



Salvati fila cu numele Operatie1.cs.Pentru a produce un executabil se

va include in linia de comanda si resursa DLL utilizata,astfel:

csc /out:Operatie1.exe /reference:FunctiileMele.DLL Operatie1.cs

In continuare,executabilul Operatie1.exe,poate fi utilizat direct cu

o linie de comanda,in care se introduc si valorile ce urmeaza sa fie

calculate.

Exemplu: pentru numerele 111 si 22222 se va utiliza o comanda:

Operatie1 111 22222

Programul va returna mesajele:

Suma dintre 111 si 22222 este 22333

Produsul dintre 111 si 22222 este 2466642

Asadar compilatorul csc.exe poate produce atat executabile cat si

biblioteci DLL,in functie de optiunile din linia de comanda.Pentru a

vedea toate optiunile posibile,puteti edita o comanda de genul:

csc.exe / ? sau csc.exe / help

Acest manual nu va analiza decat succint optiunile de compilare,asa

ca este recomandabil sa studiati referinta MSDN si sa analizati cu

maximum de atentie posibilitatile oferite de compilator.O mare parte

dintre optiuni nu sunt accesibile din interfata Visual C# si nu pot fi

apelate decat cu ajutorul unei linii de comanda.

O linie de comanda poate sa includa o singura optiune,sau o combinatie

de optiuni,in functie de rezultatul scontat.Puteti copia soltii de

compilare,din manuale si tutoriale,dar este preferabil sa analizati si sa

intelegeti continutul unei astfel de comenzi.

-8-

PRINCIPALELE OPTIUNI DE COMPILARE SUNT:


/filealign:number -permite specificarea dimensiunii,pentru fiecare

sectiune din fila produsa.Valorile acceptabile pentru number sunt:

512,1024,2048,4096 si 8192 si reprezinta bytes.Alegerea unei anumite

dimensiuni poate fi esentiala atunci cand aplicatia va fi rulata pe

unitati mici (exemplu: telefon celular).

/optimize[+ sau -] -permite utilizarea unor mecanisme de optimizare a

modulului creat,pentru a fi mai mic,mai rapid,mai eficient.In mod

implicit,compilatorul va utiliza optiunea /optimize-.Se poate combina

cu optiunea /debug.

/doc:file -permite colectarea tuturor comentariilor din cod,pentru a forma

o fila de tip XML (o fila de documentare).Daca fila XML creata are

acelasi nume ca si fila de asamblare din care a fost extrasa si este

amplasata in acelasi director,va putea fi utilizata cu utilitarul

"intelisense",pentru a facilita munca programatorilor Visual C#.

EXEMPLU: csc XMLsample.cs /doc:XMLsample.xml

/out:filename - permite specificarea unui nume pentru fila creata.Daca se

omite fila executabila va avea acelasi nume ca si fila sursa,iar in

cazul filelor DLL si NETMODULE va avea acelasi nume ca si prima fila

din lista filelor sursa.Optiunea se poate utiliza pentru a crea

simultan atat o fila .exe cat si un modul:

EXEMPLU: csc test.cs /out:modul1.netmodule /target:module t2.cs

/target -este optiunea prin care se poate specifica tipul de fila creata.

Are urmatoarele variante:

/target:exe - creaza un executabil de tip consola

/target:library - creaza o biblioteca DLL

/target:module - creaza un modul

/taget:winexe - creaza un program de tip Windows

Daca se creaza simultan mai multe file si module,manifestul va fi

amplasat in prima dintre ele.

EXEMPLU: csc /out:1.exe t1.cs /out:2.netmodule t2.cs

In exemplul de mai sus,manifestul va fi inclus in fila 1.exe.

Nu se pot crea simultan mai multe executabile sau biblioteci DLL.

Daca prima fila este .exe sau .dll,urmatoarele nu pot fi decat

module.Modulele nu sunt considerate a fi asamblari si nu pot contine

manifestul.Pentru a specifica daca fila este CLS complianta se poate

adauga si atributul CLSCompliant.

EXEMPLU:

csc /target:exe test.cs[assembly:System.CLSCompliant(true)]

Daca se omite optiunea /target,se va utiliza implicit /target:exe

Daca fila executabila se construieste din mai multe file,este

suficient ca una dintre ele sa contina functia Main.In acest caz,

se poate utiliza optiunea /main pentru a specifica fila ce contine

functia Main.Pentru filele DLL,functia Main nu este esentiala.Daca

nu se specifica altfel prin /out,biblioteca DLL va purta acelasi

nume ca si fila sursa.

EXEMPLU: csc /target:library test.cs va crea fila test.dll

Varianta target:module permite crearea unei file fara manifest.O

astfel de fila nu poate fi executata,dar poate fi inclusa in alta

asamblare cu ajutorul optiunii /addmodule.

-9-


Cu alte cuvinte,modulele se pot utiliza in lista de file sursa,

pentru a crea executabile noi.

Varianta /target:winexe creaza executabile de tip Windows.Si

acestea vor avea tot extensia .exe,dar vor avea o interfata atat

pentru platforma .Net Framework cat si pentru Win32 API.

EXEMPLU: csc /target:winexe test.cs

va crea un program de tip Windows.

/addmodule:file[;file2] -este optiunea prin care se pot include in etapa

de asamblare si module create anterior cu /target:module.Nu se

pot include file complete ce contin si manifestul.Pentru a

include simultan mai multe module,se poate utiliza virgula sau

punct si virgula intre module.Toate modulele utilizate la

constructie trebuie sa insoteasca fila executabila in momentul

executiei (sa fie in acelasi director cu fila executabila),la

fel ca orice alta fila de resurse.

EXEMPLU: csc/addmodule:metad1.netmodule /out:Program1.exe test.cs

In exemplul de mai sus,compilatorul va adauga la asamblare si

modulul meta1.netmodule,pe langa fila sursa test.cs

/lib - permite specificarea unui director,sau a unei liste de directoare,

in care compilatorul va cauta preferential o resursa,atunci cand

nu este in acelasi director cu compilatorul.

EXEMPLU: csc /lib:c:\ /reference:t2.dll t2.cs

In exemplul de mai sus,pentru a construi executabilul,compilatorul

va cauta fila t2.dll in directorul curent,sau in directorul C:\

/nostdlib[+ sau -] - permite sau blocheaza importul automat al bibliotecii

mscorlib.dll (cea care defineste System namespace).Implicit,se va

utiliza optiunea /nostlib+.Are rost sa specificati /nostlib-,doar

atunci cand doriti sa creati un System namespace propriu si

aplicatia urmeaza sa fie executata in mediu minim de memorie.

/reference:file[;file2] - se utilizeaza pentru a importa una sau mai

multe biblioteci DLL,necesare pentru compilare.Daca sunt mai

multe,se vor specifica sub forma de lista,separate prin punct si

virgula.Optiunea se poate scrie prescurtat si /r.

EXEMPLU: csc /r:meta1.dll;meta2.dll /out: Program.exe test.cs

In exemplul de mai sus,bibliotecile meta1 si meta2 se vor compila

impreuna cu fila sursa test.cs pentru a produce fila Program.exe.

/bugreport:file -permite crearea unei file de depanare,in care se vor

edita automat urmatoarele date:

-o copie a tuturor filelor sursa

-o lista cu optiunile de compilare

-informatii despre versiunea compilatorului,sistemul de operare si

mediul de executie.

-o lista a bibliotecilor DLL si a modulelor utilizate,altele decat

cele din suportul .NET.

-datele produse de compilator (daca exista)

-o scurta descriere a problemei (editata de utilizator)

-o scurta propunere de remediere (editata de utilizator)

EXEMPLU: csc /bugreport:problema.txt Test.cs

In exemplul de mai sus,se va crea automat fila problema.txt in

care se vor arhiva toate elementele amintite mai sus.Puteti apoi

expedia aceasta fila la compania Microsoft.

-10-


/checked[+ sau -] -verifica daca valorile aritmetice de tip integer sunt

sau nu sunt cuprinse in domeniul de valori (Overfolw/underflow).

Daca optiunea este checked+ si o valoare este situata in afara

domeniului,se va genera o eroare de executie.Daca se compileaza

codul cu optiunea checked-,instructiunea nu va genera o eroare de

executie,chiar daca exista valori INT in afara domeniului.

/debug[+ sau -] si /debug:{full sau pdbonly} -se utilizeaza pentru a

genera o fila in format .pdb (program database) in care se vor

arhiva informatii utile pentru depanare.Implicit este /debug-.

Daca se utilizeaza /debug+ se poate alege una dintre variantele

full sau pdbonly (implicit este full).

EXEMPLU: csc /debug test.cs.

/fullpaths -in mod implicit,daca exista erori,compilatorul specifica fila

in care a intervenit eroarea.Daca se utilizeaza optiunea /fullpaths,

compilatorul va indica si calea completa de acces la fila in care a

intervenit eroarea.

/warn:option -permite alegerea nivelului de avertismente emise de catre

compilator.Pentru option se pot utiliza urmatoarele valori:

0 -blocheaza toate mesajele de avertizare

1 -afiseaza doar avertismentele foarte severe

2 -afiseaza nivelul 1 de avertismente si unele mai putin severe

3 -afiseaza nivelul 2 de avertismente plus avertismente banale

4 -afiseaza tot setul de avertismente.Este optiunea implicita.

EXEMPLU: csc /warn:1 test.cs

/warnaserror[+ sau -] -trateaza toate avertismentele ca pe niste erori de

compilare si blocheaza asamblarea filei solicitate,pana dupa ce se

remediaza toate aceste erori.Implicit se utilizeaza: warnaserror-.

/define:name[;name2] -este echivalentul unei directive de preprocesare

definita prin #define.Se utilizeaza pentru a defini simbolurile

specificate prin "name" in etapa de preprocesare a codului.Acestea

vor ramane definite pana la o comanda #undefine.Se pot utiliza si

bucle conditionale: #if,#else,#elif si #endif.Se poate utiliza si

varianta prescurtata /d.Daca se definesc mai multe simboluri,acestea

se vor separa prin virgula sau punct si virgula.

EXEMPLU: editati urmatoarea fila test.cs:

using System;

public class Test {

public static void Main(){

#if (xx)

Console.WriteLine("xx exista");

#else

Console.WriteLine("xx nu exista");



#endif

Console.ReadLine();

}}

Compilati fila cu: csc /define:xx test.cs si apoi cu



csc test.cs si observati diferenta.

Directivele de precompilare se pot utiliza atunci cand doriti sa

blocati compilarea unor fragmente de cod.Exemplu: doriti sa puteti

produce versiuni diferite ale programului: o versiune trunchiata si

o versiune completa.

-11-


/linkresource:filename[,identifier] - creaza un link spre una dintre

resursele suportului .NET.Fila de resurse nu va fi amplasata in

fila de output (se creaza doar link-ul).Pentru a include fila se

poate utiliza optiunea /resource.Nu se poate utiliza pentru module.

Prin "filename" se specifica resursa,iar prin "identifier" se va

specifica numele resursei utilizat pentru import(de obicei numele

filei ce contine resursa).

EXEMPLU: csc /linkresource:rf.resource test.cs

/resource:filename[,identifier] -se utilizeaza pentru a ingloba o fila de

resurse in fila asamblata.Prin "filename" se specifica resursa,iar

prin "identifier" numele resursei (numele filei ce contine resursa).

EXEMPLU: csc /resource:rf.resource test.cs

/win32icon:filename -se utilizeaza pentru a include o fila de tip icon in

fila asamblata,astfel incat executabilul sa fie afisat pe ecran cu

aspectul dorit.Fila tip .ico poate fi creata si dintr-o fila .rc

cu Resource Compiler (dar mai simplu se creaza in Paint).

EXEMPLU: csc /win32icon:rf.ico test.cs

/win32res:filename - se utilizeaza pentru a insera o rsursa de tip Win32

in fila de asamblare.Fila de resurse .res poate fi creata si din

fila .rc cu Resource Compiler.

EXEMPLU: csc /win32res:rf.res test.cs

@file_name -se utilizeaza pentru a prelua comanda de compilare dintr-o

fila cu extensia .rsp.Se utilizeaza atunci cand asamblati frecvent

file cu o comanda de compilare mai complexa.Eventual se pot utiliza

doua sau mai multe astfel de file sursa,specificate fiecare separat:

@fila1.rsp @fila2.rsp ..etc.

EXEMPLU: -deschideti Notepad si editati textul:

/target:exe test.cs

salvati fila cu numele "fila1.rsp" (cu numele intre

ghilimele-altfel se va salva cu extensia .txt).Apoi puteti utiliza

fila cu o comanda: csc @fila1.rsc

/help si /? -se utilizeza pentru a lista optiunile de compilare si o

scurta descriere a lor.Nu se asambleaza nici o fila.Este doar pentru

o orientare rapida,inainte de compilare.

Exemplu: csc /? sau csc /help

/baseaddress:address -se utilizeaza pentru a specifica o adresa de baza

preferata,pentru importul unei file .DLL.Adresa se poate specifica

sub forma de numar zecimal,octal sau hexazecimal.La import,adresa

va fi rotunjita (Exemplu: 0x11110001 devine 0x11110000).

/codepage:id -se utilizeaza atunci cand fila de cod compilata utilizeza

un alt set de caractere decat cel instalat in sistemul de operare

si altul decat UTF-8.

/incremental[+ sau -] -se utilizeaza atunci cand doriti sa compilati

doar actualizarile unei file.Pentru acest scop,trebuie activata

compilarea incrementala.Prima data cind utilizati optiunea

/incremental,se va crea o fila .incr in care se salveaza informatii

despre statusul compilarii,altele decat cele arhivate in fila de

debug .pdb.Daca schimbati optiunile de compilare cu o noua optiune

/incremental,fiele .incr si .pdb vor fi actualizate automat.La o

astfel de compilare,optiunea /doc este ignorata.Este utila atunci

cand asamblarea se face din foarte multe file mici.

-12-


/main:class -se utilizeaza atunci cand codul sursa contine mai multe

clase in care este definita o functie Main(),pentru a specifica

explicit care este functia Main() din care incepe executia

programului (functia controller).

EXEMPLU: csc t2.cs t3.cs /main:Test2

In exemplul de mai sus,functia Main() de lansare a programului va

fi cea definita in clasa Test2.

/noconfig -se utilizeaza pentru a instrui compilatorul sa ignore fila

csc.rsp.

/nologo -se utilizeaza pentru a impideca afisarea unui banner in timp ce

se executa compilarea.

/recurse:[dir\]file - se utilizeaza pentru a putea compila si file sursa

localizate la alta adresa decat in directorul curent.Prin "dir" se

specifica directorul,iar prin "file" fila sau filele sursa.Se pot

utiliza si caractere generale,pentru a selecta toate fielele ce

corespund unui anumit pattern (Exemplu: csc *.cs).

EXEMPLU:

csc /target:library /out:bib1.DLL /recurse: dir1\dir2\*.cs

In exemplul de mai sus,se vor compila toate filele din directorul

dir2,arhivat in dir1,pentru a forma fila: bib1.DLL.

/unsafe -se utilizeaza pentru a permite compilarea si atunci cand exista

coduri marcate ca nesigure.

EXEMPLU: csc /unsafe test.cs

/utf8output -se utilizeaza pentru ca fila de output sa fie codificata in

caractere de tip UTF8.
Acestea sunt principalele optiuni,pentru compilatorul C sharp din

versiunea v3.5 a suportului .Net.Practic,nu exista un singur compilator,

ci fiecare versiune de program are compilatorul sau,iar programele

Visual C# au un compilator diferit.Pot exista diferente semnificative

intre versiuni (majoritatea nu pot fi executate din Visual C#).Este bine

sa verificati cel putin succint ce optiuni sunt incluse in versiunea

d-voastra (cu csc /help).

Exista si un utilitar ce permite dezasamblarea partiala a tuturor

filelor asamblate cu csc.Acest utilitar poarta numele de "idlasm.exe" si

este livrat impreuna cu sistemul de operare,in directorul Microsoft SDKs

(din Program Files).Pentru a descompune un executabil sau o biblioteca

DLL,lansati programul cu un dublu click,apoi utilizati meniul File,pentru

a deschide fila dorita.Exemplu: deschideti fila StartNotepad.exe creata

in primul exemplu din acest manual.Se va deschide continutul filei sub

forma de arbore binar.Puteti observa manifestul si clasa WelcomeCSS.

Daca executati un dublu click pe obiectele din diagrama,se va afisa

continutul obiectului respectiv,in limbaj intermediar.Din meniul View,

puteti selecta o serie de optiuni de afisare.Acest utilitar nu poate

fi utilizat pentru a extrage codurile sursa din fila de asamblare,dar

poate oferii o imagine de ansamblu a spatiilor namespace,a claselor si

metodelor,a proprietatilor si a evenimentelor din program etc.Se poate

utiliza si pentru o inspectie rapida a claselor si metodelor arhivate in

bibliotecile suportului .NET,arhivate la adresa:

C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5

De exemplu,deschideti si explorati fila: System.Core.dll.

-13-


TIPURI DE DATA
Prima aplicatie pentru orice limbaj de programare o reprezinta un

calcul numeric simplu.Primele programe pentru calculator,au fost exclusiv

programe de calcul numeric.Tot din acea perioada,dateaza si formatele

numerice simple: integer,signed si unsigned precum si stivele (stramosii

ariilor de date).Pentru a pastra compatibilitatea cu programele vechi,

majoritatea programelor noi,au pastrat si aceste tipuri de date,chiar

daca utilitatea lor este din ce in ce mai redusa.Pot fi utile,mai ales

in cadrul unor rutine de automatizare,concepute sa opereze in mediu foarte

limitat de memorie.

Limbajul C# recunoaste doua tipuri fundamentale de date : tip valoric

si tip referinta.Tipurile de data valorice pot fi elementare (int,char,

float etc) sau enumerari si structuri.Tipurile referinta (pointerii) pot

fi clase,interfete,clase delegat sau arii de date.In limbaj C# tipurile

predefinite de data sunt membrii ai clasei System,si se importa in

program o data cu biblioteca System.Tipurile valorice contin datele

propriu-zise,in timp ce referintele contin doar un pointer spre adresa

de memorie la care sunt arhivate datele.Este posibil sa existe mai multe

referinte spre aceeasi adresa de memorie.Actualizand datele de la o

astfel de adresa,se vor actualiza automat toate referintele spre acea

adresa.Prin contrast,actualizarea unui tip de data valoric nu poate

modifica nici o alta data din program (data este arhivata in acel tip).

Pentru a facilita munca programatorilor,C# ofera un set destul de

bogat de tipuri predefinite.Toate aceste tipuri predefinite sunt obiecte

si sunt declarate in biblioteca System (Exemple: System.Int16,System.Byte)

iar pentru a simplifica manevrarea lor,au si cate o denumire alias:

-------------------------------------------------------------------------

| Nume | Tip CTS | Descriere | Domeniu de valori |

--------------------------------------------------------------------------

| sbyte | System.SByte | 8-bit signed integer | -128 la 127 |

| short | System.Int16 | 16-bit signed integer | -32768 la 32767 |

| int | System.Int32 | 32-bit signed integer | -2 E31 la 2 E31 |

| long | System.Int64 | 64-bit signed integer | -2 E63 la 3 E63 |

| byte | System.Byte | 8-bit unsigend integer| 0 la 255 |

| ushort | System.UInt16 |16-bit unsigned integer| 0 la 65535 |

| uint | System.UInt32 |32-bit unsigned integer| 0 la 2 E32 (-1) |

| ulong | System.UInt64 |64-bit unsigned integer| 0 la 2 E64 (-1) |

--------------------------------------------------------------------------

| float | System.Single |32-bit single precision| 10 E-45 la 10 E38 |

| double | System.Double |64-bit double precision|10 E-324 la 10E308 |

--------------------------------------------------------------------------

| decimal | System.Decimal |128-bit high precision | 10 E-28 la 10 E28 |

--------------------------------------------------------------------------

| bool | System.Boolean | | true sau false |

--------------------------------------------------------------------------

| char | System.Char |16-bit single character|Unicode character |

--------------------------------------------------------------------------

| object | System.Object | tipul de baza CTS | tipurile derivate|

--------------------------------------------------------------------------

| string | System.String | unicode cahar. string | textul inclus |

--------------------------------------------------------------------------

-14-

Se pot utiliza ambele tipuri de notatii,dar se recomanda utilizarea



notatiilor alias (int,bool,string etc.).

Tipurile de data nu pot fi utilizate ca atare,ci se creaza variabile

sau constante din tipul respectiv.Toate aceste variabile si constante

vor fi de fapt niste obiecte,avand ca ancestor obiectul radacina:

System.Object.Prin acest mecanism,toate datele analizate de compilator

vor fi de tip obiect,adica vor fi incapsulate intr-un spatiu de memorie

denumit (namespace),pentru a evita datele defective rezultate prin

suprascrierea uni tampon de memorie cu valori mai mari decat domeniul

maxim.Daca valorile atribuite nu sunt corecte,obiectul nu se creaza si

se evita astfel aparitia unor date cu format incorect,ce nu pot fi

sterse si paraziteaza inutil memoria.In plus,structurarea sub forma de

obiecte,simplifica mecanismul automat de eliberare a memoriei (garbage

collector).


Yüklə 1,48 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   ...   14




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin