Written by: on 26/07/2007 @ 08:00

Por fin migramos en el curro a C# !!! (Lo siento Guille, se te van otros cuantos programadores a la competencia), ya podemos disfrutar del estandarte de .NET, con su estandar libre del ECMA .

¿El problema? todo lo que acarrea, sobre todo cambiar todo el codigo que normalmente usas, tus recetas, tus truquillos al nuevo lenguaje. Y en este busca que te busca me di de bruces con un articulo de el señor Frank McCown, el cual describe detalladamente las equivalencias de un leguaje a otro.

Comentarios


VB.NET


‘Single line only


Rem



Single

line only


C#


// Single line


/* Multiple


line */


/// XML comments on single line


/** XML comments on multiple lines */

Esctructura del programa


VB.NET


Imports

System


Namespace

MyNameSpace


Class
HelloWorld


‘Entry
point which delegates to C-style main Private Function


Public


Overloads



Shared



Sub

Main()


Main(System.Environment.GetCommandLineArgs())


End


Sub



Overloads


Shared



Sub

Main(args()


As



String
)


System.Console.WriteLine(
«Hello
World»
)


End


Sub



‘Main


End


Class



‘HelloWorld End Namespace ‘MyNameSpace


C#


using

System


Namespace MyNameSpace


{


class
HelloWorld


{     


static


void

Main(
string[]
args)


{


System.Console.WriteLine(
«Hello
World»
)


}


}


}



Tipos de datos


VB.NET


‘Value Types


Boolean


Byte


Char

(example:


«A»
)


Short
,


Integer
,


Long


Single
,


Double


Decimal


Date




‘Reference Types


Object


String





Dim

x


As



Integer


System.Console.WriteLine(x.GetType())


System.Console.WriteLine(
TypeName(x))




‘Type conversion


Dim

d


As



Single



=

3.5


Dim

i


As



Integer



=



CType

(d,


Integer
)


i


=



CInt

(d)


i


=



Int
(d)


C#


//Value Types


bool


byte
,


sbyte


char

(example: ‘A’)


short
,


ushort
,


int
,


uint
,


long
,


ulong


float
,


double


decimal


DateTime




//Reference Types


object


string





int

x;


Console.WriteLine(x.GetType())


Console.WriteLine(
typeof(int))




//Type conversion


float

d


=

3.5;


int

i


=

(
int)
d

Constantes


VB.NET


Const

MAX_AUTHORS


As



Integer



=

25


ReadOnly

MIN_RANK


As



Single



=

5.00


C#


const



int

MAX_AUTHORS


=

25;


readonly



float

MIN_RANKING


=

5.00;


Enumeraciones


VB.NET


Enum

Action


Start


‘Stop
is a reserved word


[
Stop]


Rewind


Forward


End



Enum



Enum

Status


Flunk


=

50


Pass


=

70


Excel


=

90


End



Enum



Dim

a


As

Action


=

Action.
Stop


If

a <> Action.Start


Then

_


‘Prints «Stop is 1»



System.Console.WriteLine(a.ToString &


» is «

& a)



‘Prints 70


System.Console.WriteLine(Status.Pass)


‘Prints
Pass


System.Console.WriteLine(Status.Pass.ToString())




Enum

Weekdays


Saturday


Sunday


Monday


Tuesday


Wednesday


Thursday


Friday


End



Enum



‘Weekdays


C#


enum

Action {Start, Stop, Rewind, Forward};


enum

Status {Flunk


=

50, Pass


=

70, Excel


=

90};













Action a


=

Action.Stop;


if

(a !
=
Action.Start)


//Prints «Stop is 1»


System.Console.WriteLine(a


+



» is «



+

(
int)
a);



// Prints 70


System.Console.WriteLine((
int)
Status.Pass);


// Prints
Pass


System.Console.WriteLine(Status.Pass);





enum

Weekdays


{


Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday


}



Operadores


VB.NET


‘Comparison


=

<  >  <=  >=  <>




‘Arithmetic


+






*



/


Mod


\  (
integer
division)


^  (
raise


to

a power)




‘Assignment


=

+=  -=  *=  /=  \
=
^
=
<<=  >>=  &=




‘Bitwise


And
  AndAlso


Or
  OrElse


Not

<<  >>




‘Logical


And



AndAlso



Or
  OrElse  Not




‘String Concatenation


&


C#


//Comparison


==  <  >  <=  >=  !
=




//Arithmetic


+






*



/


%

(mod)


/

(integer division


if

both operands are ints)


Math.Pow(x, y)




//Assignment


=

+=  -=  *=  /=   %=  &=  |=  ^
=
<<=  >>=  ++  —




//Bitwise


&  
|
^   ~  <<  >>




//Logical


&&  ||   !




//String Concatenation


+


Disyunciones


VB.NET


greeting


=



IIf
(age
< 20,


«What’s up?»
,


«Hello»
)




‘One line doesn’t require «End If», no «Else»


If

language


=



«VB.NET»



Then

langType


=



«verbose»




‘Use: to put two commands on same line


If

x <> 100


And

y < 5


Then

x *= 5 : y *= 2  




‘Preferred


If

x <> 100


And

y < 5


Then


x *= 5


y *= 2


End



If






‘or to break up any long single command use _


If

henYouHaveAReally < longLine


And

_


itNeedsToBeBrokenInto2   > Lines  
Then
_


UseTheUnderscore(charToBreakItUp)




If

x > 5


Then


x *= y


ElseIf

x


=

5


Then


x += y


ElseIf

x < 10


Then


x -= y


Else


x /= y


End



If




‘Must be a primitive data type


Select



Case

color   




Case



«black»
,


«red»


r += 1




Case



«blue»


b += 1




Case



«green»


g += 1




Case



Else


other += 1


End



Select


C#


greeting


=

age < 20 ?


«What’s up?»

:


«Hello»
;













if

(x !
=
100 && y < 5)


{




// Multiple statements must be enclosed in {}


x *= 5;


y *= 2;


}










if

(x > 5)


x *= y;


else



if

(x == 5)


x += y;


else



if

(x < 10)


x -= y;


else


x /= y;





//Must be integer or string


switch

(color)


{




case



«black»
:




case



«red»
:
r++;




break
;




case



«blue»




break
;




case



«green»
:
g++;  




break
;




default
:
other++;




break
;


}



Bucles


VB.NET


‘Pre-test Loops:


While

c < 10


c += 1


End



While



Do



Until

c


=

10


c += 1


Loop




‘Post-test Loop:


Do



While

c < 10


c += 1


Loop




For

c


=

2


To

10


Step

2


System.Console.WriteLine(c)


Next





‘Array or collection looping


Dim

names


As



String
()


=

{
«Steven»,


«SuOk»
,


«Sarah»
}


For



Each

s


As



String



In

names


System.Console.WriteLine(s)


Next


C#


//Pre-test Loops: while (i < 10)


i++;


for

(i


=

2; i <


=

10; i += 2)


System.Console.WriteLine(i);








//Post-test Loop:


do


i++;


while

(i < 10);










// Array or collection looping


string
[]
names


=

{
«Steven»,


«SuOk»
,


«Sarah»
};


foreach

(
string
s


in

names)


System.Console.WriteLine(s);



Matrices


VB.NET


Dim

nums()


As



Integer



=

{1, 2, 3}


For

i


As



Integer



=

0


To

nums.Length



1


Console.WriteLine(nums(i))


Next



‘4 is the index of the last element, so it holds 5 elements


Dim

names(4)


As



String


names(0)


=



«Steven»


‘Throws System.IndexOutOfRangeException


names(5)


=



«Sarah»




‘Resize the array, keeping the existing


‘values (Preserve is optional)


ReDim



Preserve

names(6)







Dim

twoD(rows-1, cols-1)


As



Single


twoD(2, 0)


=

4.5




Dim

jagged()()


As



Integer



=

{ _




New



Integer
(4)
{},


New



Integer
(1)
{},


New



Integer
(2)
{} }


jagged(0)(4)


=

5


C#


int
[]
nums


=

{1, 2, 3};


for

(
int
i


=

0; i < nums.Length; i++)


Console.WriteLine(nums[i]);




// 5 is the size of the array


string
[]
names


=



new



string
[5];


names[0]


=



«Steven»
;


// Throws System.IndexOutOfRangeException


names[5]


=



«Sarah»




// C# can’t dynamically resize an array.


//Just copy into new array.


string
[]
names2


=



new



string
[7];


// or names.CopyTo(names2, 0);


Array.Copy(names, names2, names.Length);





float
[,]
twoD


=



new



float
[rows,
cols];


twoD[2,0]


=

4.5;




int
[][]
jagged


=



new



int
[3][]
{




new



int
[5],


new



int
[2],


new



int
[3]
};


jagged[0][4]


=

5;



Funciones


VB.NET


‘Pass by value (in, default), reference


‘(in/out), and reference (out)


Sub

TestFunc(
ByVal
x


As



Integer
,


ByRef

y


As



Integer
,


ByRef

z


As



Integer
)


x += 1


y += 1


z


=

5


End



Sub




‘c set to zero by default



Dim

a


=

1, b


=

1, c


As



Integer


TestFunc(a, b, c)


System.Console.WriteLine(
«{0}
{1} {2}»
,
a, b, c)


‘1 2 5





‘Accept variable number of arguments


Function

Sum(
ByVal


ParamArray

nums


As



Integer
())


As



Integer


Sum


=

0




For



Each

i


As



Integer



In

nums


Sum += i




Next


End



Function



‘Or use a Return statement like C#



Dim

total


As



Integer



=

Sum(4, 3, 2, 1)


‘returns 10





‘Optional parameters must be listed last


‘and must have a default value


Sub

SayHello(
ByVal
name


As



String
,


Optional



ByVal

prefix


As



String



=



«»
)


System.Console.WriteLine(
«Greetings,
«

& prefix


&


» «

& name)


End



Sub




SayHello(
«Steven»,


«Dr.»
)


SayHello(
«SuOk»)

 


C#


// Pass by value (in, default), reference


//(in/out), and reference (out)


void

TestFunc(
int
x,


ref



int

y,


out



int

z) {


x++;


y++;


z


=

5;


}






int

a


=

1, b


=

1, c;


// c doesn’t need initializing


TestFunc(a,


ref

b,


out

c);


System.Console.WriteLine(
«{0}
{1} {2}»
,
a, b, c);


// 1 2 5





// Accept variable number of arguments


int

Sum(
params


int
[]
nums) {




int

sum


=

0;




foreach

(
int
i


in

nums)


sum += i;




return

sum;


}




int

total


=

Sum(4, 3, 2, 1);


// returns 10





/* C# doesn’t support optional arguments/parameters.


Just create two different versions of the same function. */


void

SayHello(
string
name,


string

prefix) {


System.Console.WriteLine(
«Greetings,
«



+

prefix


+



» «



+

name);


}



void

SayHello(
string
name) {


SayHello(name,


«»
);


}


Manjeo de excepciones


VB.NET


Class

Withfinally




Public



Shared



Sub

Main()




Try




Dim

x


As



Integer



=

5




Dim

y


As



Integer



=

0




Dim

z


As



Integer



=

x


/

y


Console.WriteLine(z)




Catch

e


As

DivideByZeroException


System.Console.WriteLine(
«Error
occurred»
)




Finally


System.Console.WriteLine(
«Thank
you»
)




End



Try




End



Sub



‘Main


End



Class



‘Withfinally


C#


class

Withfinally


{




public



static



void

Main()


{




try


{




int

x


=

5;




int

y


=

0;




int

z


=

x/y;


Console.WriteLine(z);


}




catch
(DivideByZeroException
e)


{


System.Console.WriteLine(
«Error
occurred»
);


}




finally


{


System.Console.WriteLine(
«Thank
you»
);


}


}


}

Namespaces


VB.NET


Namespace

ASPAlliance.DotNet.Community



End



Namespace




‘or





Namespace

ASPAlliance




Namespace

DotNet




Namespace

Community





End



Namespace




End



Namespace


End



Namespace




Imports

ASPAlliance.DotNet.Community


C#


namespace

ASPAlliance.DotNet.Community {



}




// or





namespace

ASPAlliance {




namespace

DotNet {




namespace

Community {



}


}


}




using

ASPAlliance.DotNet.Community;



Clases /
Interfaces


VB.NET


‘Accessibility keywords


Public


Private


Friend


Protected


Protected



Friend


Shared




‘Inheritance


Class

Articles




Inherits

Authors



End



Class




Imports

System




Interface

IArticle




Sub

Show()


End



Interface



‘IArticle


_




Class

IAuthor




Implements

IArticle





Public



Sub

Show()


System.Console.WriteLine(
«Show()
method Implemented»
)




End



Sub



‘Show





‘Entry point which delegates to C-style main Private Function




Public



Overloads



Shared



Sub

Main()


Main(System.Environment.GetCommandLineArgs())




End



Sub






Overloads



Public



Shared



Sub

Main(args()


As



String
)




Dim

author


As



New

IAuthor()


author.Show()




End



Sub



‘Main


End



Class



‘IAuthor


C#


//Accessibility keywords


public


private


internal


protected


protected



internal


static




//Inheritance


class

Articles: Authors {



}




using

System;




interface

IArticle


{




void

Show();


}




class

IAuthor:IArticle


{




public



void

Show()


{


System.Console.WriteLine(
«Show()
method Implemented»
);


}






public



static



void

Main(
string[]
args)


{


IAuthor author


=



new

IAuthor();


author.Show();


}


}





Constructores /
Destructores


VB.NET


Class

TopAuthor




Private

_topAuthor


As



Integer





Public



Sub



New
()


_topAuthor


=

0




End



Sub





Public



Sub



New
(ByVal
topAuthor


As



Integer
)




Me
._topAuthor


=

topAuthor




End



Sub





Protected



Overrides



Sub

Finalize()


‘Desctructor
code to free unmanaged resources




MyBase
.Finalize()




End



Sub


End



Class


C#


class

TopAuthor {




private



int

_topAuthor;





public

TopAuthor() {


_topAuthor


=

0;


}





public

TopAuthor(
int
topAuthor) {




this
._topAuthor=
topAuthor


}



~TopAuthor() {




// Destructor code to free unmanaged resources.




// Implicitly creates a Finalize method


}


}

Objetos


VB.NET


Dim

author


As

TopAuthor


=



New

TopAuthor


With

author


.Name


=



«Steven»


.AuthorRanking


=

3


End



With



author.Rank(
«Scott»)


author.Demote()


‘Calling Shared method


‘or


TopAuthor.Rank()




Dim

author2


As

TopAuthor


=

author


‘Both refer to same object


author2.Name


=



«Joe»


System.Console.WriteLine(author2.Name)


‘Prints Joe





author


=



Nothing



‘Free the object





If

author


Is



Nothing



Then

_


author


=



New

TopAuthor




Dim

obj


As



Object



=



New

TopAuthor


If



TypeOf

obj


Is

TopAuthor


Then

_


System.Console.WriteLine(
«Is
a TopAuthor object.»
)


C#


TopAuthor author


=



new

TopAuthor();



//No «With» construct


author.Name


=



«Steven»
;


author.AuthorRanking


=

3;




author.Rank(
«Scott»);


TopAuthor.Demote()


//Calling static method







TopAuthor author2


=

author


//Both refer to same object


author2.Name


=



«Joe»
;


System.Console.WriteLine(author2.Name)


//Prints Joe





author


=



null



//Free the object





if

(author ==


null
)


author


=



new

TopAuthor();




Object obj


=



new

TopAuthor(); 


if

(obj


is

TopAuthor)


SystConsole.WriteLine(
«Is
a TopAuthor object.»
);



Estructuras


VB.NET


Structure

AuthorRecord




Public

name


As



String




Public

rank


As



Single





Public



Sub



New
(ByVal
name


As



String
,


ByVal

rank


As



Single
)




Me
.name


=

name




Me
.rank


=

rank




End



Sub


End



Structure




Dim

author


As

AuthorRecord


=



New

AuthorRecord(
«Steven»,
8.8)


Dim

author2


As

AuthorRecord


=

author



author2.name


=



«Scott»


System.Console.WriteLine(author.name)


‘Prints Steven


System.Console.WriteLine(author2.name)


‘Prints Scott


C#


struct

AuthorRecord {




public



string

name;




public



float

rank;





public

AuthorRecord(
string
name,


float

rank) {




this
.name


=

name;




this
.rank


=

rank;


}


}





AuthorRecord author


=



new

AuthorRecord(
«Steven»,
8.8);


AuthorRecord author2


=

author



author.name


=



«Scott»
;


SystemConsole.WriteLine(author.name);


//Prints Steven


System.Console.WriteLine(author2.name);


//Prints Scott



Propiedades


VB.NET


Private

_size


As



Integer



Public



Property

Size()


As



Integer




Get


Return
_size




End



Get




Set

(
ByVal
Value


As



Integer
)




If

Value < 0


Then


_size


=

0




Else


_size


=

Value




End



If




End



Set


End



Property




foo.Size += 1




Imports

System




Class

[
Date]





Public



Property



Day
()


As



Integer




Get




Return



day




End



Get




Set




day



=

value




End



Set




End



Property




Private



day



As



Integer






Public



Property



Month
()


As



Integer




Get




Return



month




End



Get




Set




month



=

value




End



Set




End



Property




Private



month



As



Integer






Public



Property



Year
()


As



Integer




Get




Return



year




End



Get




Set




year



=

value




End



Set




End



Property




Private



year



As



Integer






Public



Function

IsLeapYear(
year


As



Integer
)


As



Boolean




Return
(If


year



Mod

4


=

0


Then



True



Else



False
)




End



Function



‘IsLeapYear





Public



Sub

SetDate(
day


As



Integer
,


month



As



Integer
,


year



As



Integer
)




Me
.day


=



day




Me
.month


=



month




Me
.year


=



year




End



Sub



‘SetDate


End



Class



‘[Date]


C#


private



int

_size;



public



int

Size {


get {




return

_size;


}


set {




if

(value < 0)


_size


=

0;




else


_size


=

value;


}


}





foo.Size++;




using

System;


class

Date


{




public



int

Day{


get {




return

day;


}


set {


day


=

value;


}


}




int

day;






public



int

Month{


get {




return

month;


}


set {


month


=

value;


}


}




int

month;






public



int

Year{


get {




return

year;


}


set {


year


=

value;


}


}




int

year;






public



bool

IsLeapYear(
int
year)


{




return

year%4== 0 ?


true
:


false
;


}




public



void

SetDate (
int
day,


int

month,


int

year)


{




this
.day


=

day;




this
.month


=

month;




this
.year


=

year;


}


}

Delegados /
Eventos


VB.NET


Delegate



Sub

MsgArrivedEventHandler(
ByVal
message


As



String
)




Event

MsgArrivedEvent


As

MsgArrivedEventHandler




‘or to define an event which declares a


‘delegate implicitly


Event

MsgArrivedEvent(
ByVal
message


As



String
)




AddHandler

MsgArrivedEvent,


AddressOf

My_MsgArrivedCallback


‘Won’t throw an exception if obj is Nothing


RaiseEvent

MsgArrivedEvent(
«Test
message»
)


RemoveHandler

MsgArrivedEvent,


AddressOf

My_MsgArrivedCallback





Imports

System.Windows.Forms




‘WithEvents can’t be used on local variable


Dim



WithEvents

MyButton


As

Button


MyButton


=



New

Button




Private



Sub

MyButton_Click(
ByVal
sender


As

System.
Object,
_




ByVal

e


As

System.EventArgs)


Handles

MyButton.Click


MessageBox.Show(
Me,


«Button was clicked»
,


«Info»
,
_


MessageBoxButtons.OK, MessageBoxIcon.Information)


End



Sub


C#


delegate



void

MsgArrivedEventHandler(
string
message);




event

MsgArrivedEventHandler MsgArrivedEvent;




//Delegates must be used with events in C#




MsgArrivedEvent +=


new

MsgArrivedEventHandler


(My_MsgArrivedEventCallback);


//Throws exception if obj is null


MsgArrivedEvent(
«Test
message»
);


MsgArrivedEvent -=


new

MsgArrivedEventHandler


(My_MsgArrivedEventCallback);





using

System.Windows.Forms;




Button MyButton


=



new

Button();


MyButton.Click +=


new

System.EventHandler(MyButton_Click);




private



void

MyButton_Click(
object
sender, System.EventArgs e) {


MessageBox.Show(
this,


«Button was clicked»
,


«Info»
,


MessageBoxButtons.OK, MessageBoxIcon.Information);


}


Consola I/O


VB.NET


‘Special character constants


vbCrLf, vbCr, vbLf, vbNewLine


vbNullString


vbTab


vbBack


vbFormFeed


vbVerticalTab


«»


Chr
(65)


‘Returns ‘A’





System.Console.
Write(«What’s
your name? «
)


Dim

name


As



String



=

System.Console.ReadLine()


System.Console.
Write(«How
old are you? «
)


Dim

age


As



Integer



=



Val
(System.Console.ReadLine())


System.Console.WriteLine(
«{0}
is {1} years old.»
,
name, age)


‘or


System.Console.WriteLine(name &


» is «

& age &


» years old.»
)



Dim

c


As



Integer


c


=

System.Console.Read()


‘Read single char


System.Console.WriteLine(c)


‘Prints 65 if user enters «A»


C#


//Escape sequences


\n, \r


\t


\\


\




Convert.ToChar(65)


//Returns ‘A’ – equivalent to Chr(num) in VB


// or


(
char)
65




System.Console.Write(
«What’s
your name? «
);


string

name


=

SYstem.Console.ReadLine();


System.Console.Write(
«How
old are you? «
);


int

age


=

Convert.ToInt32(System.Console.ReadLine());


System.Console.WriteLine(
«{0}
is {1} years old.»
,
name, age);


//or


System.Console.WriteLine(name


+



» is «



+

age


+



» years old.»
);




int

c


=

System.Console.Read();


//Read single char


System.Console.WriteLine(c);


//Prints 65 if user enters «A»



Ficheros I/O


VB.NET


Imports

System.IO




‘Write out to text file


Dim

writer


As

StreamWriter


=

File.CreateText


(
«c:\myfile.txt»)


writer.WriteLine(
«Out
to file.»
)


writer.Close()




‘Read all lines from text file


Dim

reader


As

StreamReader


=

File.OpenText


(
«c:\myfile.txt»)


Dim

line


As



String



=

reader.ReadLine()


While



Not

line


Is



Nothing


Console.WriteLine(line)


line


=

reader.ReadLine()


End



While


reader.Close()




‘Write out to binary file


Dim



str



As



String



=



«Text data»


Dim

num


As



Integer



=

123


Dim

binWriter


As



New

BinaryWriter(File.OpenWrite


(
«c:\myfile.dat»))


binWriter.
Write(str)


binWriter.
Write(num)


binWriter.Close()




‘Read from binary file


Dim

binReader


As



New

BinaryReader(File.OpenRead


(
«c:\myfile.dat»))


str



=

binReader.ReadString()


num


=

binReader.ReadInt32()


binReader.Close()


C#


using

System.IO;




//Write out to text file


StreamWriter writer


=

File.CreateText


(
«c:\\myfile.txt»);


writer.WriteLine(
«Out
to file.»
);


writer.Close();




//Read all lines from text file


StreamReader reader


=

File.OpenText


(
«c:\\myfile.txt»);


string

line


=

reader.ReadLine();


while

(line !
=


null
)
{


Console.WriteLine(line);


line


=

reader.ReadLine();


}


reader.Close();




//Write out to binary file


string

str


=



«Text data»
;


int

num


=

123;


BinaryWriter binWriter


=



new

BinaryWriter(File.OpenWrite


(
«c:\\myfile.dat»));


binWriter.Write(str);


binWriter.Write(num);


binWriter.Close();




//Read from binary file


BinaryReader binReader


=



new

BinaryReader(File.OpenRead


(
«c:\\myfile.dat»));


str


=

binReader.ReadString();


num


=

binReader.ReadInt32();


binReader.Close();

Catogories: .NET, Mono, Software Libre

Leave a Reply