C# 3.0 var keyword


U nekoliko prethodnih postova sam pisao o novinama koje dolaze izlaskom C# 3.0. Jedna od novina koje su pobudile veliko interesovanje programera je novi tip var . Opis novog tipa ću pokušati objasniti na primjerima i specifičnostima njegove upotrebe.

Npr. imamo sljedeći kod:

var intVNumber = 23;
var strVRijec = "Vozdra Svijete";

Ovo znači da tip var neka vrsta zajedničkog tipa, koji može sadržavati bilo koji type. Ovo može zvučati kao izmišljanje tople vode, jer sve to može raditi i object tip.

Npr:

object objNumber = 23;
object objRijec = "Vozdra Svijete";

Međutim pogledajmo sljedeći dio koda:

intVNumber ++; //Kompajler ne prijavljuje nikakvu grešku jer je var uistinu tipa intint
objNumber++; //error CS0023: Operator '++' cannot be applied to operand of type 'object'

Ovo znači da nema govora o tome kako object može zamjeniti ovu riječ. Da bi se uvjerili u to pokušajmo kompajlirati sljedeći dio koda:

int VNumber = objNumber; //error CS0266: Cannot implicitly convert type 'object' to 'int'. An explicit conversion exists (are you missing a cast?)

Ali ovaj dio koda će se kompajlirati:

int VNumber = (int)objNumber;

Još jedna krucijalna stvar koja var tip razlikuje od tip object je nrp kada pokušamo kompajlirati sljedeći dio koda:

int VNumber=strVRiječ; // error CS0029: Cannot implicitly convert type 'string' to 'int'

Ovo znači da var u svojoj deklaraciji poprima jedan od tipova, koji se više ne može dinamički mijenjati tokom životnog vijeka ove varijable. Za razliku od var, object može poprimati različite tipove.

objNumber = objRijec;//Kompajler ne prijavljuje grešku

Pogledajmo sljedeći dio koda:

var objVarijabla=objNumber; //objVarijable je tipa object

Sada možemo pisati:

objVarijabla = "Vozdra Svijete";
objVarijabla = 123.456;objVarijabla = 's';

U ovom slučaju var objVarijabla inicijalizirana je sa varijablom tipa object, što znači da objVarijabla sada ima sve osobine tipa object.

Osobine var tipa

Nekoliko limitirajući osobina ovaj tip čini specifičnim:

Kada deklarišemo var tip tada mora postojati i inicijalizacija istog npr:var xvarijabla; // Greška, ne postoji inicijalizacija koja bi ukazivala na određeni tip

var xKolekcija = {1, 2, 3}; // Greška, inicijalizacija kolekcije nije dozvoljena
var xNull = null; // Greška, null tip nije dozvoljen

var

tip deklariše se samo kao lokalna varijabla, te ne može biti prosljeđena preko funkcije u bilo kojem obliku

public int Increment(var intNumber){return intNumber +=23;}

Kompajler će prijaviti grešku: error CS0825: The contextual keyword ‘var’ may only appear within a local variable declaration

Kao i u prethodnim zaključcima novine u C# 3.0 vežu se za LINQ Language integrated query, pa tako i tip var.

About Bahrudin Hrnjica

PhD in Mechanical Engineering, Microsoft MVP for .NET. Likes .NET, Math, Mechanical Engineering, Evolutionary Algorithms, Blogging.

Posted on 22/08/2007, in .NET, C# and tagged , . Bookmark the permalink. 3 Comments.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s