Despre
C#
-Facilitati,
comparare cu alte limbaje de programare, exemple de cod-
Ioana
Neagu, Diana Hora,
Zorita Radosavlevici
Avantajele
C#
C#
este un mediu RAD
Alte
facilitati C#
Facilitati
care nu exista in C#
Exemple
de cod
Linkuri
Iulie
31, 2000: viziunea initiala a Microsoft-ului asupra conceptului
"Internet" este departe de continutul retelelor web din zilele noastre.
Microsoft considera Internetul viitor ca o lume a serviciilor
interdependente dezvoltate de indivizi diferiti, scrise in limbaje
diferite, desfasurate pe tipuri diferite de suportul fizic,
si
gazduite de diferite sisteme de operare Internet.
Oferta
companiei pentru aceasta noua lume este platforma .Net. De fapt,
.Net nu este o platforma in sensul traditional; nu este un sistem
software sau hardware comun. In schimb, .Net este o colectie de
protocoale care permit diverselor aplicatii internet sa se foloseasca
de servicii disparate care ruleaza pe masini diferite
Un
rezultat direct al strategiei firmei Microsoft este ca versiunea de
Microsoft Visual Studio include limbaje remodelate, modificate explicit
sa suporte platforma .Net.
Avantajele
C#
sus
- Dezvoltare rapida de
aplicatii: Unul din cele mai
importante obiective ale Microsoft pentru
C# este suport pentru RAD (Rapid Application Development). Aplicatiil
einternet trebuie sa fie dezvoltate in timp internet; un nou limbaj
trebuie sa fie usor de invatat si depanat, si trebuie produce cod care
se poate modifica usor. In timp ce VB si Delphi exceleaza in aceste
domenii, C++ nu a fost tocmai un succes. Limbajul in sine este complex
si greu de manuit, si putine biblioteci C++ ofera interfete simple. In
plus, managementul manual al memoriei si modelul de type-casting
complex fac depanarea la C++ foarte dificila. In plus, cum se va arata
in continuare C++ nu protejeaza inerent impotriva potentialelor
probleme cauzate de incompatibilitati ale versiunilor.Cu tot efortul
depus de Microsoft si Borland, C++ nu este potrivit pentru dezvoltare
rapida a aplicatiilor.
- Functionare
inter-platforme: Limbajele
internet ar trebui sa suporte, prin definitie, o functionare
inter-platforme.Deoarece internetul este o retea de sisteme disparate,
serviciile trebuie sa functioneze pe o gama larga de hardware si
software. In plus, software-ul orientat pe client ar trebui sa ruleze
pe mai multe tipuri de dispozitive, inclusiv PDA si telefoane mobile. O
astfel de flexibilitate este o provocare pentru toate limbajele, cu
exceptia Java. In special VB produce doar aplicatii Windows pentru
masini bazate pe Intel. Delphi, de asemenea , are aceleasi restrictii.
Delphi pentru Linux este disponibil deja, dar nu ofera inca suport
pentru aplicatii internet. Nici VB si nici Delphi nu indeplinesc
conditiile pentru functionarea independenta de platforma.
- Acces la resursele
caracteristice platformei:
Programatorii cer tot mai mult acces la resursele specifice platformei,
spune un studiu Microsoft. adesea este nevoie de astfel de acces pentru
a scrie aplicatii tinta puternice. Visual J++ 6.0 oferea
programatorilor acces la Windows API, ceea ce Java de obicei nu
permite. In schimb, Java ofera functionare independenta de platforma
prin definirea unui cel mai mic numitor comun standard implementat de
orice masina virtuala. Programatorii Java trebuie sa codeze folosind
acest standard mai putin puternic, in loc sa profite de serviciile mai
puternice oferite doar de anumite platforme. Astfel, Java nu reuseste
sa indeplineasca obiectivul de a da acces la resurse specifice
platformei.
- Suport pentru platformele
COM si .Net: Microsoft a
hotarat ca suportull pentru COM si .Net este
principalul obiectiv ce trebuie sa-l indeplineasca C#. Nici un alt
limbaj nu suporta platforma .Net, deorece era inca in constructie. Spre
deosebire de .Net, COM exista de ceva vreme, dar totusi duce lipsa
suportului unui limbaj puternic. Majoritatea limbajelor, incluzand C++
si Delphi, necesita ca programatorii sa mai faca in plus o declarare
IDL, o fabrica de clase si impachetari speciale pentru fiecare obiect
COM creat.
C#
este un mediu RAD.
sus
C# asigura colectarea spatiului
disponibil in stilul
limbajului
Java: Una dintre cele mai semnificative caracteristici RAD ale
limbajului C# este colectarea spatiului disponibil in stilul limbajului
Java. La intervalele arbitrare din timpul momentul executiei, toate
obiectele care nu mai sunt referite sunt in mod automat
sterse.
Usurand treaba programatorului de a elibera manual memoria-
colectarea spatiului disponibil face generarea programelor mai
usoară si fără eroare. Colectarea
spatiului
disponibil automatăeste totusi consumatoare de timp si
imprevizibila. In consecintă, C# permite programatorilor sa
dezactiveze local colectarea spatiului disponibil, marcand
codul
cu "nesigur", in situatiile in care este
necesară
realizarea performantei in timp real.
C# pune in aplicare un tip un sistem
valoare/referinta in stilul limbajelor Java/Delphi: Pentru a sprijini
RAD, C# foloseste in continuare pointerul de C, C++ in
favoarea
tipului de sistem valoare/referinta Java si Delphi. in acest
sistem, tipurile predefinite (intreg, real,string, si asa mai
departe), enumerările, si structurile, sunt toate tipuri de
valoari. Operatori de comparatie copiaza si verifica valorile acestor
tipuri de variabile. Interfetele, clasele, si "delegate"-urile sunt
toate tipuri de referinte. Operatorii de comparare copiaza si verifica
identitatea obiectelor la care se refera aceste tipuri de variabile.
Aceast tip de sistem este mai mult simplu decat
pointerii
din C++.Face mai usoară folosirea obiectelor si
elimină
multe din erorile ce apar in programele de C si C++.
In C# interfetele sunt declarat separat fata de clase: C# de
asemenea sprijin&a un model de interfata Delphi si
Java,
unde interfetele sunt declarate in mod independent de
clase.Este
opusul modelului C++, unde interfetele sunt clase de baza abstracte.
Ambele interfete si clase pot sa mosteneasca
interfetele
multiple. In timp ce clasele pot sa
mosteneasca o
singura clasa de baza, interfetele nu pot sa
mosteneasca clase deloc. Acest model evita
problema
multiplei mosteniri, in care pot aparea conflicte. Nevoia
pentru
mecanismele complexe ca de exemplu mostenirea virtuala este
de
asemenea eliminata. Interfata simplificata a C#-ului ajuta
la
marirea vitezei aplicatiei.
Declaratiile si definitiile metodelor de
clasa sunt
combinate: C# simplifica dezvoltarea aplicatiilor prin
combinarea declaratiilor si definitiilor de metodele clasei,asa cum
face Java. Programatorii de C++ trebuie sa
mentina
separate fisierele pentru declaratii( fisierul antet) si definitii(
fisierul de implementare), complicand dezvoltarea procesului
software. Usurand programatorul de inca un task, C#
descopera automat relatii printre modulele sursei. Acolo
unde
C++ necesita #include( si Delphi "uses") C# nu are nevoie de
nimic aditional pentru a localiza fisierele inrudite de sursa.
C# foloseste referirile metodelor, numiti "delegate",
in
loc de pointerii la metoda: C# foloseste referintele la
metode
pentru a conecta repede obiectele si metodele. Numite si
"delegate",aceste metode sunt asemanatoare cu
tipurilor
procedurale ale limbajului Delphi. Hejlsberg a prezentat acel mecanism
in Visual J++ desi el nu este parte standard a limbajului
Java.
Referintele la metoda sunt intrucatva
asemanatoare cu pointerii la metoda
din C++, dar
sunt de departe mult mai elegante, sigure, si folositoare.
Un delegat este un tip de o referinta care tine
semnatura
metodei. O aplicatie sa poata sa
desemneze oricare
metoda care un potriveste aceasta o
semnatura la o variabila "delegate".
Cand
"delegate" este invocat, este chemata si metoda asociata..
Spre
deosebire de tipurile de proceduri Delphi, "delegates" suporta si
multicasting-ul. O aplicatie poate sa desemneze multe metode
la
o variabila "delegat"; Cand variabila este
invocata, sunt
apelate toate metodele.
C# foloseste mecanismul Java pentru sincronizarea unui singur
fir: Pentru a pune in aplicare sincronizarea firelor de
executie
in C#, un programator pur si simplu marcheaza
blocurile
critice de cod. Unde un programator Java foloste cuvantul
cheie
"synchronised",un programator de C# foloseste"lock"=lacat. Un mutex
protejeaza blocul, permitand numai un fir sa execute codul
odata.
Declaratiile suprascrise explicite: in cele din
urma, C# foloseste declaratiile de suprascriere explicit
pentru
a sprijini RAD-ul. Declaratiile de suprascriere explicite sprijina
dezvoltarea rapida a aplicatiilor, protejand
metoda
claselor namespaces si expunand accidental conflictele.
Un programator al unei o clase C# derivate, trebuie
in mod
clar sa marcheze o suprascriere de metoda cu
cuvantul cheie "override", asa cum face si in Delphi.
Daca
o clasa derivata include o metoda care are
acelasi nume
ca metoda virtuala din clasa de baza, compilatorul nu poate
precis sa desluseasca intentia autorului.
Pe de alta parte, un conflict de nume ar putea foarte bine
accidental; se intampla in special cand clasa de baza si
clasa
derivata au fost implementate in mod independent de doi programatori,
lucrand poate in companiile diferite. in astfel de caz,
compilatorul va da un avertisment si va trata metodele clasei derivate
ca o declaratie noua,nu ca pe o suprascriere.
Daca, pe pe de alta parte,
programatorul a decis in
mod constient sa foloseasca nume pentru o noua
metoda
dintr-o clasa derivata, care are acelasi nume ca o
metoda
virtuala din clasa de baza, el sau ea poate
includa
cuvantul cheie "new" pentru a impiedica avertizarea
data de
compilator.
Alte
facilitati C#
sus
Luand in considerare toate
caracteristicile discutate deja, suport
puternic pentru RAD pare a fi unul din principalele obiective ale
Microsoft pentru C#. Sunt si alte nevoi de dezvoltare importante la
care C# trebuie sa raspunda. Acestea includ dezvoltare independenta de
platforma, acces la resurse tipice platformei, si suport petru
platformele COM si .NET. Sa examinam facilitatile C# prin care se
intentioneaza a satisface aceste nevoi.
- Functionare independenta
de
platforma:
C#
rezolva problema functionarii independente de
platforma in acelasi mod ca si Java. Compilatorul de C# genereaza un
flux de cod binar care este interpretat de .Net runtime. Componenta
runtime lucreaza ca si o masina virtuala Java; o aplicatie poate fi
rulata pe orice masina pe care a fost portat .Net runtime.
- Accesul
aplicatiei la
resurse
specifice platformei: Spre
deosebire de masina virtuala Java,
.Net runtime ofera acces programatic la resursele specifice platformei.
Un program C# poate folosi, de exemplu, Windows API pentru a rula ca o
aplicatie completa sub Windows 2000. Acelasi program poate rula pe un
PDA folosind subsetul Windows CE API. Bineinteles, nu toate serviciile
pe care aplicatia le asteapta vor fi disponibile pe toate masinile. De
aceea, este responsabilitatea developerului sa testeze software-ul pe
toate platformele tinta, si sa scrie cod special, daca este nevoie,
care sa permita functionarea in absenta unor servicii asteptate.
- Suport
pentru COM si
.Net: Pentru
a sprijini atat platforma COM, cat si .Net, C# include o importanta
facilitate a limbajului, numita atribute.
Un
atribut este de fapt o clasa C# care <> codul sursa
pentru a oferi metainformatie. Atributele faciliteaza suportul oferit
de C# unor tehnologii specifice precum COM sau .Net fara a ingreuna
specificatiile limbajului in sine.
De
exemplu, C# pune la
dispozitie clase de atribute care convertesc interfete C# in interfete
COM. Altele convertesc clase C# in coclase COM. Nu
este nevoie de IDL sau de vreo fabrica de clase pentru a face aceste
conversii.
Unii comentatori ai limbajului au declarat ca toate clasele C# sunt
obiecte COM. Acest lucru
nu corespunde tocmai adevarului, dar nu atributele corespunzatoare,
orice clasa C# poate fi
exprimata ca un obiect COM. Alta biblioteca de
atribute oferita impreuna cu compilatorul de C# impacheteaza clasele si
functiile ca servicii Web. Un serviciu Web este un modul software
gazduit
care poate fi chemat prin internet folosind un protocol precum SOAP.
SOAP impacheteaza
apelari de metode, impreuna cu parametrii si valorile
returnate de acestea, inpachete de date XML. Serviciile Web pot fi
scrise in multe limbaje si livrate pentru
multe platforme software si hardware. Mai mult, mai multe servicii Web
pot coopera si forma o intreaga aplicatie Web. Folosind atributele
corespunzatoare, un programator poate modifica cu usrinta
orice
clasa sau functie C# intr-un serviciu Web.
Facilitati
care nu se gasesc la C#
sus
Multe din
facilitatile pe care C# le foloseste in aplicatille Internet
sunt alese din Delphi si Java. Totusi Microsoft pretinde ca C# descende
din C si C++. De aceea vom examina unele caracteristici prezente la C++
si care lipsesc la C#.
- Scopul si dereferirea
operatorilor: C# nu foloseste
operatorul de
scop C++ (::), in schimb se bazeaza pe echivalentul din Delphi si Jave,
punctul (.). Mai mult, deoarece se bazeaza pe sistemul valoare/
referinta de tipul Delphi/ Java, C# adesea nu foloseste operatorul de
dereferire din C++ (->). In schimb, implementeaza din nou
punctul.
In timpce operatorul punct supraincarcat poate aduce confuzie in randul
programatorilor de C++ care tocmai invata C#, le va fi familiar celor
care au fost developeri Delphi sau Java.
- Sintaxa declararii
referintei: Deoarece clasele interfetele si
tipurile delegate sunt implicit referinte, la C# lipseste declaratia de
referinte de la C++. in loc, noul limbaj foloseste o sintaxa similara
cu declararea din delphi a parametrilor transmisi prin referinta:
- un parametru nemarcat este
parametru de intrare.
- cuvantul cheie ref indica
un
parametru de intrare-iesire
(asemanator cu var-ul din Delphi)
- cuvantul cheie out indica
un
parametru de iesire.
- cuvantul cheie params
indica
o lista de parametri d elungime
variabila (asemanator cu varianta din Delphi de parametri siruri
deschise)
- Template-uri: La fel ca Java
si Delphi, C# nu are template-uri.
Prin urmare, nu are un mecanism pentru a sprijini declaratia puternic
tipizata de colectii. In schimb, fiecare clasa este in final derivata
din clasa de baza comuna object. O clasa generica de colectie trebuie
sa fie ocolectie de objectS, necesitand un downcast nesigur al
membrilor ei spre tipul dorit.
Totusi, chiar fara aceste facilitati ale
limbajului C++, C# este un
limbaj puternic, proiectat cu facilitati asemanatoare java si Delphi
pentru a permite dezvoltarea de aplicatii internet. Datorita orientarii
spre masina, si a lipsei de suport RAD, C++ nu ar fi fost o
baza
potrivita pentru un limbaj menit sa fie folosit la a dezvolta aplicatii
internet. Orice developer de C++ care trebuie sa scrie aplicatii si
servicii pentru platforma .Net, va fi sfatuit sa invete C#. Iar acestea
doua difera mai mult decat ar putea sugera numele.
Exemple de
cod
sus
In
exemplul de mai jos vom arata cum C# face uz de resursele sistemului de
operare (folosind o functie API, InternetGetConnectedState).
Aplicatia este folosita pentru a determina conectivitatea la internet a
calculatorului gazda.
using
System ;
using System.Runtime ;
using System.Runtime.InteropServices ;
public class
InternetCS
{
//Creating the
extern function...
[DllImport("wininet.dll")]
private extern static bool
InternetGetConnectedState( out int Description, int ReservedValue ) ;
//Creating a
function that uses the API function...
public static bool
IsConnectedToInternet( )
{
int
Desc ;
return InternetGetConnectedState( out Desc, 0 ) ;
}
}
Linkuri
utile
sus
http://www.c-sharpcorner.com/Internet.asp
www.msdn.com
http://www.javaworld.com/