Apuntes sobre C

Anuncio
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Tabla de contenido
1.
Apuntes sobre C# ............................................................................................................................................................ 2
1.1.
Compilación y ejecución ........................................................................................................................................ 2
1.2.
Estructura general de un programa en C# ............................................................................................................... 3
1.3.
Utilizar nombres completos .................................................................................................................................... 4
1.4.
Crear y utilizar archivos DLL de C# ...................................................................................................................... 5
Archivos de código fuente .............................................................................................................................................. 5
Compilación .................................................................................................................................................................... 7
Ejecución ........................................................................................................................................................................ 8
Resultados ....................................................................................................................................................................... 8
1.5.
Comparación entre C++ y C# ................................................................................................................................. 8
2. Comparativo entre lenguajes ........................................................................................................................................ 17
Instrucciones de selección ............................................................................................................................................ 18
Pasar parámetros por referencia .................................................................................................................................... 20
Control estructurado de excepciones ............................................................................................................................ 20
Establecer una referencia de objeto a Nothing ............................................................................................................. 21
3. Palabras clave comparadas en diferentes lenguajes ...................................................................................................... 22
4. Programación orientada a objetos ................................................................................................................................. 25
5. Control de excepciones ................................................................................................................................................. 28
6. Estructuras de decisión ................................................................................................................................................. 29
7. Matrices ........................................................................................................................................................................ 29
8. Ámbito de clase ............................................................................................................................................................ 30
9. Ámbito de miembro ...................................................................................................................................................... 30
10.
Varios Período de duración....................................................................................................................................... 31
11.
Varios ........................................................................................................................................................................ 31
12.
Operadores comparados en diferentes lenguajes ...................................................................................................... 34
13.
Tipos de datos comparados en diferentes lenguajes ................................................................................................. 37
14.
Comparación de los controles y objetos programables de distintos lenguajes y bibliotecas .................................... 39
1
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
1. Apuntes sobre C#
C# es un lenguaje de programación simple pero potente diseñado para escribir aplicaciones empresariales.
El lenguaje C# es una evolución de los lenguajes C y C++. Utiliza muchas de las características de C++ en las áreas de
instrucciones, expresiones y operadores.
C# presenta considerables mejoras e innovaciones en áreas como seguridad de tipos, control de versiones, eventos y
recolección de elementos no utilizados (liberación de memoria).
El siguiente programa de consola es la versión de C# del tradicional programa "Hola mundo!", el cual muestra en pantalla
la cadena Hola mundo!.
// Hola mundo en C#
class Hello
{
static void Main()
{
System.Console.WriteLine("Hola mundo!");
}
}
1.1. Compilación y ejecución
El programa "Hola a todos" se puede compilar creando un proyecto en el Entorno de desarrollo integrado (IDE) de Visual
Studio, o bien mediante la línea de comandos.
Para compilar el programa desde la línea de comandos:


Cree el archivo de código fuente mediante cualquier editor de texto y guárdelo con un nombre como Hello.cs.
Los archivos de código fuente de C# utilizan la extensión .cs.
Para invocar el compilador, ejecute el comando:
2
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
csc Hello.cs
Si el programa no contiene errores de compilación, se creará un archivo Hello.exe.

Para ejecutar el programa, escriba el comando:
Hello
1.2. Estructura general de un programa en C#
Los programas en C# pueden constar de uno o varios archivos. Cada archivo puede contener uno o varios espacios de
nombres. Un espacio de nombres puede contener tipos como clases, estructuras, interfaces, enumeraciones y delegados,
además de otros espacios de nombres. A continuación, se muestra el esqueleto de un programa en C# que contiene todos
estos elementos.
// Esqueleto de un programa en C#
using System;
namespace MyNamespace1
{
class MyClass1
{
}
struct MyStruct
{
}
interface IMyInterface
{
}
delegate int MyDelegate();
enum MyEnum
{
}
namespace MyNamespace2
{
}
class MyClass2
{
public static void Main(string[] args)
{
3
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
}
}
}
1.3. Utilizar nombres completos
Los espacios de nombres y los tipos tienen nombres únicos, que se describen mediante nombres completos que indican
una jerarquía lógica. Por ejemplo, A.B es el nombre del espacio de nombres o tipo B anidado en el espacio de nombres o
tipo A.
En el siguiente segmento de código, existen clases y espacios de nombres anidados. El nombre completo se indica como
un comentario que sigue a cada entidad.
namespace N1
{
class C1
{
class C2
{
}
}
namespace N2
{
class C2
{
}
}
}
// N1
// N1.C1
// N1.C1.C2
// N1.N2
// N1.N2.C2
En el segmento de código anterior:



El espacio de nombres N1 es un miembro del espacio de nombres global. Su nombre completo es N1.
El espacio de nombres N2 es un miembro del espacio de nombres N1. Su nombre completo es N1.N2.
La clase C1 es un miembro del espacio de nombres N1. Su nombre completo es N1.C1.
4
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.

El nombre de clase C2 se utiliza dos veces en el código. Sin embargo, los nombres completos son únicos. El
primero se declara dentro de C1; así, su nombre completo es: N1.C1.C2. El segundo se declara dentro de un
espacio de nombres N2; así, su nombre completo es N1.N2.C2.
En el segmento de código anterior se puede agregar un nuevo miembro de clase C3 al espacio de nombres N1.N2 de la
siguiente forma:
namespace N1.N2
{
class C3
// N1.N2.C3
{
}
}
1.4. Crear y utilizar archivos DLL de C#
Las bibliotecas de vínculos dinámicos (DLL) se vinculan al programa en tiempo de ejecución. Para ilustrar la creación y
el uso de una DLL, considere el siguiente escenario:




MyLibrary.DLL:
archivo de biblioteca que contiene los métodos que se utilizarán durante la ejecución. En este
ejemplo, la DLL contiene dos métodos, Add y Multiply.
Add.cs: archivo de código fuente que contiene el método Add(long i, long j). Devuelve la suma de sus
parámetros. La clase AddClass, que contiene el método Add, es un miembro del espacio de nombres MyMethods.
Mult.cs: archivo de código fuente que contiene el método Multiply(long x, long y). Devuelve el producto
de sus parámetros. La clase MultiplyClass, que contiene el método Multiply, es también un miembro del
espacio de nombres MyMethods.
MyClient.cs: archivo que contiene el método Main. Utiliza los métodos del archivo DLL para calcular la suma y
el producto de los argumentos especificados en tiempo de ejecución.
Archivos de código fuente
Archivo: Add.cs
// Add two numbers
using System;
5
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
namespace MyMethods
{
public class AddClass
{
public static long Add(long i, long j)
{
return(i+j);
}
}
}
Archivo: Mult.cs
// Multiply two numbers
using System;
namespace MyMethods
{
public class MultiplyClass
{
public static long Multiply(long x, long y)
{
return (x*y);
}
}
}
Archivo: MyClient.cs
// Calling methods from a DLL file
using System;
using MyMethods;
class MyClient
{
public static void Main(string[] args)
{
Console.WriteLine("Calling methods from MyLibrary.DLL:");
if (args.Length != 2)
{
Console.WriteLine("Usage: MyClient <num1> <num2>");
return;
}
long num1 = long.Parse(args[0]);
long num2 = long.Parse(args[1]);
6
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
long sum = AddClass.Add(num1, num2);
long product = MultiplyClass.Multiply(num1, num2);
Console.WriteLine("The sum of {0} and {1} is {2}",
num1, num2, sum);
Console.WriteLine("The product of {0} and {1} is {2}",
num1, num2, product);
}
}
Este archivo contiene el algoritmo que utiliza los métodos de la DLL, Add y Multiply. Empieza analizando los
argumentos especificados en la línea de comandos, num1 y num2. A continuación, calcula la suma mediante el método Add
de la clase AddClass, y el producto mediante el método Multiply de la clase MultiplyClass.
Observe que la directiva using situada al principio del archivo permite utilizar los nombres de las clases sin calificar para
hacer referencia a los métodos de la DLL en tiempo de compilación, por ejemplo:
MultiplyClass.Multiply(num1, num2);
De lo contrario, sería necesario usar nombres completos, por ejemplo:
MyMethods.MultiplyClass.Multiply(num1, num2);
Compilación
Para generar el archivo MyLibrary.DLL, compile los dos archivos Add.cs y Mult.cs mediante la siguiente línea de
comandos:
csc /target:library /out:MyLibrary.DLL Add.cs Mult.cs
La opción /target:library indica al compilador que genere un archivo DLL en vez de un archivo EXE. La opción /out del
compilador seguida de un nombre de archivo se utiliza para especificar el nombre de archivo de la DLL. Si no se utiliza,
el compilador usa el primer archivo (Add.cs) como nombre de la DLL.
Para generar el archivo ejecutable, MyClient.exe, utilice la siguiente línea de comandos:
csc /out:MyClient.exe /reference:MyLibrary.DLL MyClient.cs
7
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
La opción /out indica al compilador que genere un archivo EXE y especifica el nombre del archivo ( MyClient.exe).
Esta opción del compilador no es de uso obligatorio. La opción /reference del compilador especifica el archivo o archivos
DLL que utiliza el programa.
Ejecución
Para ejecutar el programa, especifique el nombre del archivo EXE seguido de dos números, por ejemplo:
MyClient 1234 5678
Resultados
Calling methods from MyLibrary.DLL:
The sum of 1234 and 5678 is 6912
The product of 1234 and 5678 is 7006652
1.5. Comparación entre C++ y C#
La siguiente tabla contiene comparaciones importantes entre características de C++ y C#. Los programadores de C++
encontrarán rápidamente en esta tabla las diferencias más importantes entre ambos lenguajes. Para obtener más
información, utilice el vínculo para examinar el tema correspondiente.
Nota Los proyectos de C++ y C# provienen de diferentes modelos de proyecto. Para obtener más información acerca de
las diferencias entre los proyectos de C++ y C#.





Característica
Herencia: una clase puede heredar la implementación de una sola clase base. Además, una clase o una interfaz
pueden implementar varias interfaces.
Matrices: la sintaxis para declarar matrices de C# es diferente de la sintaxis de C++. Los símbolos "[]" aparecen a
continuación del tipo de matriz en C#.
El tipo bool: no existe una conversión entre el tipo bool y otros tipos (concretamente, int).
El tipo long: en C#, el tipo de datos long tiene 64 bits, mientras que en C++ tiene 32 bits.
El tipo struct: en C#, las clases y las estructuras son semánticamente diferentes. Una estructura (struct) es un tipo
de valor mientras que una clase (class) es un tipo de referencia.
8
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.























La instrucción switch: a diferencia de la instrucción switch de C++, C# no admite el paso explícito de una
etiqueta de caso a otra.
El tipo delegate: los delegados son prácticamente similares a los punteros a función de C++, pero más seguros.
Llamadas a los miembros reemplazados de una clase base desde clases derivadas.
Uso del modificador new para ocultar explícitamente un miembro heredado.
La declaración de métodos que reemplazan a otros requiere la palabra clave override.
Las directivas de preprocesador se utilizan para la compilación condicional. En C# no se utilizan archivos de
encabezado.
Control de excepciones: uso de la instrucción finally.
Operadores de C#: en C# no se incluyen operadores adicionales como is y typeof. También presenta una
funcionalidad diferente en algunos operadores lógicos.
Uso de la palabra clave extern.
Uso de la palabra clave static.
Método alternativo a la lista de inicialización de C++ para construir una clase base.
Estructura general de un programa en C#: espacios de nombres, clases, estructuras, delegados y enumeraciones.
El método Main se declara de forma diferente a la función main de C++. Además, se compara el uso de los
argumentos de línea de comandos de cada lenguaje.
Parámetros de métodos: C# admite parámetros ref y out, que se utilizan en lugar de punteros para pasar
parámetros por referencia.
C# admite punteros, pero sólo en modo no seguro (unsafe).
La sobrecarga de operadores se realiza de forma diferente en C#.
Cadenas: las cadenas (tipo string) de C# son diferentes de las cadenas de C++.
La palabra clave foreach permite realizar iteraciones en matrices y colecciones.
No existen métodos o variables globales en C#: los métodos y las variables deben residir dentro de una
declaración de tipo (class o struct).
No existen archivos de encabezado ni directivas #include en C#: la directiva using se utiliza para hacer referencia
a tipos en otros espacios de nombres sin necesidad de usar los nombres de tipo completos.
Las variables locales de C# no se pueden utilizar antes de su inicialización.
Destructores: en C#, no se tiene control sobre cuándo se llama a los destructores, ya que es el recolector de
elementos no utilizados el que se encarga de llamarlos automáticamente.
Constructores: a diferencia de C++, si no se proporciona un constructor de clase en C#, se genera automáticamente
un constructor predeterminado. El constructor predeterminado inicializa todos los campos de la estructura con sus
valores predeterminados.
9
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.



C# no admite campos de bits.
Los servicios de entrada y salida de C# y el formato los proporciona la biblioteca de tiempo de ejecución de .NET
Framework.
En C#, los parámetros de los métodos no pueden tener valores predeterminados. Utilice sobrecargas de métodos
para obtener ese efecto.
class sola
{
static void Main(string[] par)
{
string dato;
long l1;
dato =1523.ToString();
System.Console.WriteLine ("Muestra el dato {0}",dato);
try
{l1 = long.Parse(par[0]);}
catch(System.FormatException)
{ l1 = 0;}
int e1 = int.Parse(par[1]);
dato =l1.ToString();
System.Console.WriteLine ("Muestra el dato entrado {0}",dato);
System.Console.WriteLine ("Muestra entradas desde {0} a {1}",par[0],par[par.Length-1]);
System.Console.WriteLine ("Largo de {0} es {1}",par[0],l1);
System.Console.WriteLine ("entero de {0} es {1}",par[1],e1);
for (int i=0;i<par.Length;i++)
{ System.Console.WriteLine ("Argumento {0} = {1}",i,par[i]); }
foreach (string elemento in par)
{
System.Console.Write("{0} parametros entrados>", elemento);
switch (elemento)
{
10
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
case "pedro":
System.Console.WriteLine ("Hola Pedro");
break;
case "juan":
System.Console.WriteLine ("Hola juan");
break;
default:
System.Console.WriteLine ("Hola como esta");
break;
}
int i=0;
do
{ System.Console.WriteLine ("Argumento {0} = {1}",i,par[i++]); }
while (i < par.Length);
int[] x = new int[5] {4,5,8,9,7};
i=0;
while (i<5)
System.Console.WriteLine("{0}",x[i++]);
int[][] y = {new int[3],new int[4]};
for(int j=0;j<2;j++)
for(int k=0;k<3;k++)
y[j][k]=k+j;
for(int j=0;j<2;j++)
{
for(int k=0;k<3;k++)
System.Console.Write("{0}\t",y[j][k]);
System.Console.WriteLine();
} } } }
11
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
C# obtiene la mayoría de sus instrucciones directamente de C y C++, aunque tiene algunas adiciones y modificaciones dignas de comentar. En
la tabla siguiente se proporciona una lista de las clases de instrucciones que pueden utilizarse, junto con ejemplos.
Instrucción
Listas de instrucciones e instrucciones
de bloque
Instrucciones con etiqueta e
instrucciones goto
Declaraciones de constantes locales
Declaraciones de variables locales
Ejemplo
static void Main() {
F();
G();
{
H();
I();
}
}
static void Main(string[] args) {
if (args.Length == 0)
goto done;
Console.WriteLine(args.Length);
done:
Console.WriteLine("Done");
}
static void Main() {
const float pi = 3.14f;
const int r = 123;
Console.WriteLine(pi * r * r);
}
static void Main() {
int a;
int b = 2, c = 3;
a = 1;
Console.WriteLine(a + b + c);
}
12
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Instrucciones de expresiones
static int F(int a, int b) {
return a + b;
}
static void Main() {
F(1, 2); // Expression statement
}
Instrucciones if
static void Main(string[] args) {
if (args.Length == 0)
Console.WriteLine("No args");
else
Console.WriteLine("Args");
}
static void Main(string[] args) {
switch (args.Length) {
case 0:
Console.WriteLine("No args");
break;
case 1:
Console.WriteLine("One arg ");
break;
default:
int n = args.Length;
Console.WriteLine("{0} args", n);
break;
}
}
static void Main(string[] args) {
int i = 0;
while (i < args.Length) {
Console.WriteLine(args[i]);
i++;
}
}
Instrucciones switch
Instrucciones while
13
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Instrucciones do
Instrucciones for
Instrucciones foreach
Instrucciones break
Instrucciones continue
static void Main() {
string s;
do { s = Console.ReadLine(); }
while (s != "Exit");
}
static void Main(string[] args) {
for (int i = 0; i < args.Length; i++)
Console.WriteLine(args[i]);
}
static void Main(string[] args) {
foreach (string s in args)
Console.WriteLine(s);
}
static void Main(string[] args) {
int i = 0;
while (true) {
if (i == args.Length)
break;
Console.WriteLine(args[i++]);
}
}
static void Main(string[] args) {
int i = 0;
while (true) {
Console.WriteLine(args[i++]);
if (i < args.Length)
continue;
break;
}
}
14
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Instrucciones return
static int F(int a, int b) {
return a + b;
}
static void Main() {
Console.WriteLine(F(1, 2));
return;
}
Instrucciones throw e instrucciones try static int F(int a, int b) {
if (b == 0)
throw new Exception("Divide by zero");
return a / b;
}
static void Main() {
try {
Console.WriteLine(F(5, 0));
}
catch(Exception e) {
Console.WriteLine("Error");
}
}
Instrucciones checked y unchecked
static void Main() {
int x = Int32.MaxValue;
Console.WriteLine(x + 1);
// Overflow
checked {
Console.WriteLine(x + 1);
}
// Exception
unchecked {
Console.WriteLine(x + 1);
}
// Overflow
}
15
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Instrucciones lock
using statements
static void Main() {
A a = ...;
lock(a) {
a.P = a.P + 1;
}
}
static void Main() {
using (Resource r = new Resource()) {
r.F();
}
}
16
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
2. Comparativo entre lenguajes
Concepto
Declarar
variables
Visual Basic
Dim x As Integer
Public x As Integer = 10
int x;
int x = 10;
Comentarios
' comment
x = 1
' comment
Rem comment
// comment
/* multiline
comment */
Instrucciones
de asignación
nVal = 7
C#
nVal = 7;
Java
int x;
int x =
10;
C++
int x;
int x = 10;
//
/*
multilin
e
comment
*/
/**
Class
Document
ation
*/
// comment
nVal = 7;
nVal = 7;
/* multiline
comment */
JScript
var x : int;
var x : int =
10;
var x = 10;
// comment
/* multiline
comment */
VisualFoxPro
LOCAL x
X = 10
* full line
USE && end
of line
NOTE
multiline ;
comment
nVal = 7;
nVal = 7
O
STORE 7 to
nVal
Instrucciones
condicionales
If nCnt <= nMax Then
nTotal += nCnt '
Same as nTotal =
nTotal + nCnt.
nCnt += 1
'
Same as nCnt = nCnt +
1.
Else
nTotal += nCnt
nCnt -= 1
End If
if (nCnt <= nMax)
{
nTotal += nCnt;
nCnt++;
}
else
{
nTotal +=nCnt;
nCnt--;
}
if (nCnt
<=
nMax){
nTotal
+= nCnt;
nCnt++;
}
if(nCnt <
nMax) {
nTotal +=
nCnt;
nCnt++;
}
else {
nTotal +=
nCnt;
nCnt --;
};
if(nCnt <
nMax) {
nTotal +=
nCnt;
nCnt ++;
}
else {
nTotal +=
nCnt;
nCnt --;
};
IF nCnt <
nMax
nTot =
nTot * nCnt
nCnt =
nCnt + 1
ENDIF
17
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Instruccione
s de
selección
Select Case n
Case 0
MsgBox ("Zero")
' Visual Basic
.NET exits the Select
at the end of a Case.
Case 1
MsgBox ("One")
Case 2
MsgBox ("Two")
Case Else
MsgBox
("Default")
End Select
switch(n)
{
case 0:
Console.WriteLine("Zero");
break;
case 1:
Console.WriteLine("One");
break;
case 2:
Console.WriteLine("Two");
break;
default:
Console.WriteLine("?");
}
switch(n
) {
case
0:
System.o
ut.print
ln("Zero
\n");
break;
case
1:
System.o
ut.print
ln("One\
n");
break;
switch(n) {
case 0:
printf("Zero
\n");
break;
case 1:
printf("One\
n");
break;
case 2:
printf("Two\
n");
break;
default:
switch(int(n))
{
case 0 :
print("Zero")
break
case 1 :
DO CASE
CASE n = 0
? 'Zero'
CASE n > 0
? 'Pos'
OTHERWISE
? 'Neg'
ENDCASE
print("One")
break
case 2 :
print("Two")
default :
print("Default
")
}
printf("?\n"
);}
default:
System.o
ut.print
ln("?\n"
);
}
Bucles FOR
For n = 1 To 10
MsgBox("The number
is " & n)
Next
For Each prop In obj
prop = 42
Next prop
Bucles
WHILE
While n < 100 ' Test
at start of loop.
for (int i = 1; i <= 10; i++)
Console.WriteLine("The
number is {0}", i);
foreach(prop current in obj)
{
current=42;
}
for(n=1;
n<11;n++
)
while (n < 100)
n++;
while (n
< 100)
System.o
ut.print
ln("The
number
is " +
n);
for(int n=1;
n<11; n++)
printf("%d\n
",n);
while(int n
< 100)
for (var n =
0; n < 10;
n++) {
print("The
number is " +
n)
}
for (var prop
in obj)
obj[prop] = 42
FOR n = 1 TO
10
? n
ENDFOR
while (n <
100)
DO WHILE n <
100
18
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
n += 1
' Same
as n = n + 1.
End While '
Pasar
parámetros
por valor
Public Sub ABC(ByVal y
As Long) ' The
argument Y is passed
by value.
' If ABC changes y,
the changes do not
affect x.
End Sub
ABC(x) ' Call the
procedure.
' You can force
parameters to be
passed by value,
regardless of how
' they are declared,
by enclosing the
parameters in extra
parentheses.
ABC((x))
n++;
/* Note that there is no way to
pass reference types (objects)
strictly by value. You can
choose to either pass the
reference (essentially a
pointer), or a reference to the
reference (a pointer to a
pointer).*/
// The method:
void ABC(int x)
{
...
}
// Calling the method:
Objects are
always
passed
by
reference,
and
primitive
data types
are always
passed
by
value.
n++;
MyMethod(i,j
);
n++;
ABC(i)
n = n + n
ENDDO
=ABC(X)
ABC(i);
19
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Pasar
parámetros
por
referencia
Public Sub ABC(ByRef y
As Long)
' The parameter y is
declared by by
referece:
' If ABC changes y,
the changes are made
to the value of x.
End Sub
ABC(x) ' Call the
procedure.
Try
Control
estructurado
de
excepciones
If x = 0 Then
Throw New
Exception("x equals
zero")
Else
Throw New
Exception("x does not
equal zero")
End If
Catch err As
System.Exception
MsgBox("Error: " &
Err.Description)
Finally
MsgBox("Executing
finally block.")
End Try
/* Note that there is no way to
pass reference types (objects)
strictly by value. You can
choose to either pass the
reference (essentially a
pointer), or a reference to the
reference (a pointer to a
pointer).*/
// Note also that unsafe C#
methods can take pointers just
like C++ methods. For details,
see unsafe.
// The method:
void ABC(ref int x)
{
...
}
// Calling the method:
ABC(ref i);
// try-catch-finally
try
{
if (x == 0)
throw new
System.Exception ("x equals
zero");
else
throw new
System.Exception ("x does not
equal zero");
}
catch (System.Exception err)
{
System.Console.WriteLine(err.Me
ssage);
}
finally
{
System.Console.WriteLine("execu
ting finally block");
Objects are
always
passed
by
reference,
and
primitive
data types
are always
passed
by
value.
// Prototype
of ABC that
takes a
pointer to
integer.
int ABC(long
*py);
ABC(&VAR);
// Prototype
of ABC that
takes a
reference to
integer.
int ABC(long
&y);
ABC(VAR);
/* Reference
parameters are
supported for
external
objects, but
not internal
JScript
functions. Use
'&' to call by
reference */
myObject.ByRef
Method(&x);
try{
if (x
== 0)
__try{
throw
new
Exceptio
n ("x
equals
zero");
else
throw new
Exception
("x equals
zero");
else
try {
if (x == 0)
throw "x
equals zero"
else
throw "x
does not equal
zero"
}
catch(e) {
throw
new
Exceptio
n ("x
does not
equal
zero");
}
catch
(Excepti
on err){
if (x
== 0)
throw new
Exception
("x does not
equal
zero");
}
__catch(Exce
ption e)
{
=ABC(@X)
O bien
DO ABC WITH X
print("Error
description: "
+ e)
}
finally {
print("Executi
ng finally
block.")
}
Console.Writ
eLine("Caugh
20
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
}
if
(err.get
Message(
) == "x
equals
zero")
t
Exception");
}
System.o
ut.print
ln(err.g
etMessag
e());
Console.Writ
eLine("Execu
ting finally
block");
}
__finally
{
//Handle
Error
Here
}
o = Nothing
Establecer
una
referencia
de objeto a
Nothing
o = null;
stringVar =
null;
o = undefined;
MyObj = null O
bien
Obj.RELEASE
21
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
3. Palabras clave comparadas en diferentes lenguajes
Propósito
Palabra clave en
Visual Basic
Declarar una Private, Public,
variable
Friend,
Protected,
Static1, Shared,
Dim
Declarar una Const
constante
con nombre
NUEVA
Palabra clave en
Java
NUEVO
declaradores (las
palabras clave
incluyen tipos
definidos por el
usuario y tipos
integrados)
const
Crear un
New
nuevo objeto
CreateObject()
Asignar un
=
objeto a una
variable
objeto
La
Sub2
función/méto
do no
devuelve un
valor
Sobrecargar Overloads
una función
o un método
(Visual
Basic:
sobrecargar
un
procedimient
Palabra clave en C#
readonly
New
public, private,
protected (si es
una variable
miembro)
Palabra clave en Palabra clave en
C++
JScript
declaradores
(concepto, no
palabra clave)
const, volatile
(Nota: no son
necesarias para una
declaración).
final (se aplica a const
una declaración de
campo)
var
const
NUEVA
Palabra clave
en Visual
FoxPro
[declaración
implícita];
también PUBLIC,
LOCAL, PRIVATE
#DEFINE
New
new
no disponible
CREATEOBJECT;
CoCreateInstance new
()
ActiveXObject() NEWOBJECT
=
=
=; también
STORE
=
=
Void
void
No se requiere
No se requiere
ninguna palabra clave ninguna palabra
para esta finalidad clave para esta
finalidad
new
no disponible
void
void
Void (sólo
servidores COM)
No se requiere
ninguna palabra
clave para esta
finalidad
No se requiere
ninguna palabra
clave para esta
finalidad
No se requiere
ninguna palabra
clave para esta
finalidad
22
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
o o un
método)
Hacer
referencia
al objeto
actual
Realizar una
llamada no
virtual a un
método
virtual del
objeto
actual
Recuperar
caracteres
de una
cadena
Declarar un
tipo de
datos
compuesto
(Visual
Basic:
Structure)
Inicializar
un objeto
(constructor
es)
Finalizar un
objeto de
forma
directa
Llamada del
método por
el sistema
antes de que
el
recolector
de elementos
Me3
this
this
This
This;
this
Thisform
MyClass
GetChar
Function
no disponible
MyClass:Func1(), no disponible
donde MyClass es
una clase de C+
con una función
miembro Func1.
[]
getChar
struct, class,
interface
no disponible
SUBSTR( )
*(p + 10) o
str[10], donde
p[10] donde p es str es una
un char*
cadena, charAt,
substring,
substr4
class, struct,
class,
no disponible
union
interface NUEVA
NUEVA
Structure
<miembros> End
Structure
no disponible
__interface
Sub New()5
no disponible
Constructores, o
Constructores
constructores de
(concepto, no
tipos predeterminados palabra clave)
del sistema
no disponible
no disponible
Finalize NUEVA (En destructor
Visual Basic 6.0,
Class_Terminate)
finalize
evento Init
constructores
(concepto, no
palabra clave)
constructor
(concepto, no
palabra clave)
~ClassName
no disponible
no disponible
destructor
no disponible
evento Destroy
6
23
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
no
utilizados
reclame un
objeto7
Inicializar Dim x As Long = 5 // inicializar con un int x = 5;
int x=5;
una variable
valor:
donde se
Dim c As New
//or initialized by
declara
Car(FuelTypeEnum. int x = 123;
constructor
Gas)
// o utilizar el
C c(10);
constructor
predeterminado:
int x = new int();
Tomar la
AddressOf (para
delegate
dirección de los miembros de
una función clase, este
operador devuelve
una referencia a
una función en el
formulario de una
instancia de
delegado)
Devolución
no disponible
no disponible
de llamada
Declarar que no disponible
un objeto se
puede
modificar de
forma
asincrónica
Forzar la
Option Explicit
var x = 5
no disponible
var y : car =
new car()
no disponible
__delegate
Utilice el
nombre de la
función sin
paréntesis
no disponible
CALLBACK (tipo
estándar);
callback
(atributo IDL)
no disponible
no disponible
volatile
Pase la dirección
de una función a
otra que devuelve
la llamada al
llamador. Para
obtener un ejemplo,
vea Utilizar
funciones de
devolución de
llamada.
volatile
volatile
no disponible
no disponible
no disponible. Es
no disponible. Es
no disponible.
modo rápido
_VFP.LanguageOp
24
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
declaración
explícita de
variables
preciso declarar
preciso declarar
todas las variables todas las variables
antes de utilizarlas. antes de
utilizarlas.
(activada de
tions
manera
predeterminada)
pObj == 0
Es preciso
declarar todas
las variables
antes de
utilizarlas.
pobj == NULL
Probar una
obj = Nothing
variable
objeto que
no hace
referencia a
un objeto
Valor de una Nothing
variable
objeto que
no hace
referencia a
un objeto
Probar una
IsDbNull
expresión de
tipo null de
una base de
datos
obj == null
Null
null
no disponible
null
Probar si
no disponible
una variable
Variant se
ha
inicializado
Definir una Default NUEVA
propiedad
predetermina
da
no disponible
NUEVA
obj == undefined EMPTY();
ISNULL()
obj == null
no disponible
undefined
no disponible
Compatible con
no disponible
diversos tipos de
datos del espacio
de nombres
System.Data.SqlType
s
no disponible
no disponible
utilizar indizadores [System::Reflection no disponible
::DefaultMember("Na
me")]
x == null
ISNULL( )
x == undefined
EMPTY( )
no disponible
no disponible
4. Programación orientada a objetos
Propósito
Hacer referencia a
una clase base
Palabra clave en Visual Palabra clave Palabra clave en Palabra clave
Palabra clave en
NUEVO
Basic
en C#
Java
en C++
JScript
NUEVA
NUEVA
MyBase
base
__super
super
super
Palabra clave en Visual
FoxPro
BaseClass property;
ParentClass property;
25
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
NUEVA
Declarar una
Interface
interfaz
Especificar una
Implements (instrucción)
interfaz para que se
implemente
NUEVA
DODEFAULT()
DEFINE CLASS
interface
interface
__interface
Interface
class C1 : I1
implements
(cláusula en una
declaración de
clase)
Sólo hay que
derivar de la
interfaz.
implements NUEVA
IMPLEMENTS NUEVA
class NUEVA
DEFINE CLASS MyClass
AS <BaseClass>
no disponible
class C1 :
public I1
class
Declarar una clase Class NUEVA
<implementación>
Especificar que una MustInherit NUEVA
clase sólo se puede
heredar. No se
puede crear una
instancia de la
clase.
Especificar que una NotInheritable NUEVA
clase no se puede
heredar
class
class
abstract
abstract
__abstract8 (sólo abstract NUEVA
en extensiones
administradas
de C++)
sealed
final
final NUEVA
no disponible
Declarar un tipo
enumerado
Declarar una
constante de clase
Enum <miembros> End
Enum
Const
enum
no disponible
__sealed (sólo
en extensiones
administradas
de C++)
enum
enum NUEVA
no disponible
const
const NUEVA
#DEFINE
Derivar una clase
de una clase base
Inherits C2 NUEVA
const (se aplica a static final (se
una declaración aplica a una
de campo)
declaración de
campo)
clase C1 : C2
class C1 extends
C2
Clase C1 : base class c1 extends
pública (No se c2 NUEVA
requiere
ninguna palabra
clave para esta
finalidad)
DEFINE CLASS MyClass
AS ParentClass
26
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Reemplazar un
método
Overrides NUEVA
Declarar un método MustOverride NUEVA
que se debe
implementar en una
clase que se deriva
override
abstract
No se requiere
ninguna palabra
clave para esta
finalidad
abstract
Declarar un método NotOverridable NUEVA (Los sealed
que no se puede
métodos no se reemplazan
reemplazar
de forma predeterminada.)
final
Declarar un
Overridable
método, una
propiedad (Visual
Basic) o un
descriptor de acceso
a propiedad (C#,
C++) virtual
Declarar una
Delegate NUEVA
referencia con
seguridad de tipos a
un método de una
clase
Especificar que una WithEvents
variable puede
contener un objeto
cuyos eventos se
desea controlar
Especificar los
Handles NUEVA(Los
eventos para los
procedimientos de evento
que se llamará a un se pueden seguir asociando
virtual
Los métodos son
virtuales de forma
predeterminada
delegate
no disponible
No se requiere
ninguna palabra
clave para esta
finalidad
Poner = 0 al
final de la
declaración
(método virtual
puro)
__sealed (sólo
en extensiones
administradas
de C++)
virtual
No se requiere
No se requiere ninguna
ninguna palabra clave palabra clave para esta
para esta finalidad
finalidad
abstract NUEVA
No se requiere ninguna
palabra clave para esta
finalidad
final NUEVA
no disponible
Los métodos son
virtuales de forma
predeterminada
no disponible
__delegate (sólo Utilice el nombre de
en extensiones la función sin
administradas paréntesis
de C++)
no disponible
Escribir código. no disponible
No hay una
palabra clave
específica
no disponible
Escribir código. No EVENTHANDLER( )
hay una palabra clave NUEVA
específica
no disponible
no disponible
no disponible
no disponible
no disponible
27
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
procedimiento de
evento.
a una variable WithEvents
mediante el modelo de
nomenclatura)
Evaluar una
With objExpr <.miembro> no disponible
expresión de objeto <.miembro> End With
una vez para tener
acceso a varios
miembros
no disponible
no disponible
with9
WITH…ENDWITH
5. Control de excepciones
Propósito
Palabra clave en
Visual Basic
NUEVA
Control estructurado Try
de excepciones
<attempt>
Catch
<handle errors>
Finally
<always execute>
End Try
Control de
no disponible
excepciones de C++
Palabra clave en Palabra clave en Palabra clave en Palabra clave en Palabra clave en Visual
C# NUEVO
Java
C++
JScript
FoxPro
try, catch, finally, Try, catch,
__try, __except, try, catch, finally, ONERROR( ),
throw
__finally
throw
COMRETURNERROR( ),
finally, throw
ERROR(); MESSAGE(),
AERROR()
no disponible
no disponible
try, catch, throw No disponible
no disponible
28
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
6. Estructuras de decisión
Propósito
Palabra clave en
Visual Basic
Estructura de decisión Select Case …, Case,
(selección)
Case Else, End Select
Estructura de decisión
(if ... then)
Estructura de bucle
(condicional)
Estructura de bucle
(iteración)
Palabra clave en
C# NUEVO
switch, case,
default, goto,
break
if, else
Palabra clave en Palabra clave en Palabra clave en
Palabra clave en
Java
C++
JScript
Visual FoxPro
switch, case,
switch, case, break CASE
switch, case,
break; default;
default, goto,
break;
if, else
if, else
if, else
IF ... ENDIF
If … Then, ElseIf …
Then, Else, End If
While, Do [While,
do, while, continue do, while,
Until] …, Loop [While,
continue
Until]
For …, [Exit For,] Next for, foreach
for, break
do, while, continue do, while, break,
continue
for
For Each …, [Exit
For,] Next
DO, WHILE
(cláusulas)
for
FOR (cláusulas),
(x=0;x<10;x++){…} FOR … ENDFOR,
Continue, Next
for (prop in obj) {
print (obj[prop]);}
7. Matrices
Propósito
Palabra clave en
Visual Basic
Dim a() As Long
Palabra clave en
C# NUEVO
Declarar una matriz
int[] x = new
int[5];
Inicializar una matriz Dim a() As Long = {3, int[] x = new
4, 5}
int[5] {1, 2, 3, 4,
5};
Reasignar matriz
ReDim
no disponible
Palabra clave en
Java
int[] x = new
int[5];
int[] x = new int[]
{1,2,3,4,5};
no disponible
Palabra clave en
Palabra clave en
C++
JScript
int x[5];
var x : int[], var arr =
Array()
int x[5]=
var x : int[] = [1, 2, 3, 4,
{1,2,3,4,5};
5], var arr = new
Array(1, 2, 3, 4, 5)]
no disponible
arr.length=newSize(sólo
para matrices de
JScript)10
Palabra clave en
Visual FoxPro
DIMENSION,
DECLARE
DIMENSION,
DECLARE
DIMENSION,
DECLARE
29
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
8. Ámbito de clase
Propósito
Palabra clave en
Visual Basic
Public
Visible fuera del
proyecto o del
ensamblado
Invisible outside the Friend
assembly (C#/Visual
Basic) or within the
package (Java,
JScript)
Sólo visible dentro
Private
del proyecto (para
clases anidadas,
dentro de la clase
envolvente)
Palabra clave en Palabra clave en Palabra clave en Palabra clave en
Palabra clave en
NUEVO
C#
Java
C++
JScript
Visual FoxPro
NUEVA
public
public
public
public
PUBLIC
internal
private
Al omitir la
private
palabra clave del
ámbito se
especifica "ámbito
del paquete"
private
private
internal NUEVA
no disponible
private NUEVA
HIDDEN
9. Ámbito de miembro
Propósito
Palabra clave en
Visual Basic
Accesible desde fuera de Public
la clase y del proyecto
(Java/JScript/C++/Visual
Basic) o del módulo
(Visual Basic)
Accesible desde fuera de Friend
la clase, pero desde
dentro del proyecto (C#,
Visual Basic, C++) o del
paquete (Java, JScript)
Accesible sólo desde
Private
dentro de la clase
Palabra clave en Palabra clave en Palabra clave en Palabra clave en Palabra clave en
C# NUEVO
Java
C++
JScript
Visual FoxPro
NUEVA
public
public
public
public
PUBLIC
internal
private
Al omitir la
public private:
palabra clave del
ámbito se
especifica "ámbito
del paquete"
private
private
internal NUEVA
no disponible
private NUEVA
HIDDEN
30
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
(Java/JScript/C++/Visual
Basic) o del módulo
(Visual Basic)
Accesible sólo para
Protected NUEVA
clases actuales y
derivadas
Especificar que una
no disponible
función u otra clase tiene
acceso a miembros
privados de la clase que
se declara
Protegido dentro del
no disponible
ensamblado y privado
para los demás
ensamblados
protected
protected
protected
protected NUEVA
PROTECTED
no disponible
no disponible
no disponible
no disponible
no disponible
no disponible
friend (no se
permite en las
extensiones
administradas de
C++)
protected
private:
(Sólo en las
extensiones
administradas de
C++)
no disponible
no disponible
10. Varios Período de duración
Propósito
Palabra clave en
Visual Basic
Static11
Conservar las
variables locales de
un procedimiento
Compartido por todas Shared NUEVA
las instancias de una
clase.
Palabra clave en Palabra clave en Palabra clave en Palabra clave en
Palabra clave en
C# NUEVO
Java
C++
JScript
Visual FoxPro
no disponible
static
no disponible
static
PRIVATE
static
static
static
static NUEVA
no disponible
11. Varios
Propósito
Comentar código
Palabra clave en
Visual Basic
'
Palabra clave en Palabra clave en Palabra clave en Palabra clave en
Palabra clave en
C# NUEVO
Java
C++
JScript
Visual FoxPro
//, /* */ for
//
//, /* */ para
//, /* */ for multiline *; &&
31
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Rem
multiline
comments
/// for XML
comments
/**
comentarios de
varias líneas
comments
Sí
Sí
No
no disponible
no disponible
DECLARE - DLL
no disponible
no disponible
no disponible
*/
/*
Distinguir mayúsculas No
de minúsculas
Lamar a la API de
Declare <API>
Windows
Declarar y provocar Event, RaiseEvent
un evento.
Tipos primitivos de SyncLock
subprocesamiento
Sí
*/
Sí
Utilizar invocación Llamar
de la plataforma
directamente
event
__event
lock
Está en las clases
no disponible
no disponible
del espacio de
nombres
System.Threading.
Ir a
Goto
goto
no disponible
goto
no disponible
no disponible
1. El único lugar donde se puede utilizar la palabra clave Static por sí misma para declarar una variable, por ejemplo, Static x As Long, es en un
procedimiento.
2. En Visual Basic, los procedimientos declarados con la palabra clave Sub no pueden devolver valores. Si un procedimiento tiene que devolver un
valor, se debe declarar con la palabra clave Function.
3. Me no se resuelve en tiempo de compilación, por lo que se puede utilizar como el valor devuelto de una propiedad o un método.
4. Todavía se admite la función substr, pero no es la forma más recomendada para el acceso a los caracteres de una cadena. La mejor manera de tener
acceso a un carácter desde una ubicación concreta de una cadena es la de utilizar corchetes. Por ejemplo, para tener acceso al décimo carácter de la
cadena, utilice str[10].
5. En Visual Basic, los constructores para las clases derivadas de System.Object de .NET Framework se denominan siempre New.
6. No se permite la sobrecarga en constructores de JScript.
7. Normalmente, el código de este método libera recursos del sistema que no liberaría automáticamente el recolector de elementos no utilizados.
8. En C++ una clase abstracta incluye al menos un miembro virtual puro.
9. Observe que no hay un punto inicial como se utilizaría en Visual Basic. Esta característica puede crear confusión fácilmente porque las variables se
pueden confundir con propiedades, y viceversa. Tenga en cuenta también que la instrucción with produce un código lento.
32
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
10. No reasigna la matriz ni aumenta su tamaño. Las matrices JScript (declaradas como tipo Array) son siempre dispersas y dinámicas. Las matrices
nativas (declaradas como System.Array o como type[]) no son dinámicas.
11. Las variables locales estáticas de métodos de clases no compartidos se almacenan por instancias de clase en Visual Basic, en vez de compartir una
copia única como ocurre en otros lenguajes. Cuando se utiliza Static para declarar una variable, se conserva el valor de esa variable aunque la variable
pierda el ámbito y lo vuelva a obtener después.
33
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
12. Operadores comparados en diferentes lenguajes
En este tema se enumeran los operadores de Visual Basic, Java, Visual C++, Visual C#, JScript y Visual FoxPro.
C# NUEVO
Visual Basic
Aditivo
Suma
Resta
Multiplicativo
Multiplicación
División
División de número entero
Módulo (división que
devuelve sólo el resto)
Java
C++
JScript
Visual FoxPro
+
-
+
-
+
-
+
-
+
-
+
-
*
/
\
Mod
*
/
/1
%
*
/
no disponible
%
*
/
*
/
*
/
%
%; Mod
Exponenciación
Asignación
Asignación
Suma
Resta
Multiplicación
División
División de número entero
Concatenar
^
no disponible
no disponible
% (también
funciona con
punto flotante)
no disponible
=
+= NUEVO
-= NUEVO
*= NUEVO
/= NUEVO
\= NUEVO
&= NUEVO
=
+=
-=
*=
/=
/=1
+=
=
+=
-=
*=
/=
no disponible
+=
=
+=
-=
*=
/=
no disponible
=
+=
-=
*=
/=
no disponible
+=
Módulo
Desplazamiento a la
izquierda
no disponible
no disponible
%=
<<=
%=
<<=
%=
<<=
%=
<<=
=
+
*
/
no disponible
+
$
%
BITLSHIFT( )
^, **
34
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Desplazamiento a la derecha
AND bit a bit
OR exclusivo bit a bit
Bitwise-inclusive-OR
Relacional e igualdad
Menor que
Menor o igual que
Mayor que
Mayor o igual que
Igual
No igual
Comparar dos variables de
referencia de objeto.
Comparar el tipo de
referencia de objeto
no disponible
no disponible
no disponible
no disponible
>>=
&=
^=
|=
>>=
&=
^=
|=
>>=
&=
^=
|=
>>=
&=
^=
|=
BITRSHIFT( )
BITAND( )
BITXOR( )
BITOR( )
<
<=
>
>=
=
<>
Is
<
<=
>
>=
==
!=
==
<
<=
>
>=
==
!=
==
<
<=
>
>=
==
!=
no disponible
<
<=
>
>=
==
!=
==
<
<=
>
>=
=
<>; #; !=
COMPOBJ()
TypeOf x es
Class1
instanceof
no disponible
Comparar cadenas
=
x is Class1 (vea x instanceof
no disponible
también as y
Class1
typeof)
==
String.equals() Existen
funciones para
comparar y
-orconcatenar
String.Equals()
cadenas
+
+
&&
&&
&&
==
=
+
&&
+
no disponible
||
||
||
||
no disponible
<<
<<
<<
<<
no disponible
>>
>>
>>
>>, >>>
no disponible
Concatenar cadenas
&
AND booleano
AndAlso
cortocircuitado
OR booleano cortocircuitado OrElse
Desplazamiento
Desplazamiento a la
no disponible
izquierda
Desplazamiento a la derecha no disponible
Resolución de ámbito
35
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Resolución de ámbito
Postfijo2
Elemento de matriz
Llamada a función
Conversión de tipos
.
. y base
no disponible
::
no disponible
::
()
()
Cint, CDbl, …,
CType
.
no disponible
no disponible
[]
()
(tipo)
[]
()
(tipo)
[]
()
(tipo)
[]
()
tipo()
[ ]; ()
()
no disponible
.
++
--
.
++
--
. O bien ->
++
--
.
++
--
.
no disponible
no disponible
no disponible
*
no disponible
no disponible
no disponible
&
no disponible
no disponible
!
~
++
-no disponible
,
!
~
++
-Sizeof
,
!
~
++
-no disponible
,
!
BITNOT( )
no disponible
no disponible
no disponible
no disponible
Selección de miembro
Postfijo de incremento
Postfijo de decremento
Unario3
Direccionamiento indirecto no disponible
Dirección de
AddressOf
NOT lógico
Complemento de uno
Prefijo de incremento
Prefijo de decremento
Tamaño de tipo
coma
Bit a bit
AND bit a bit
OR exclusivo bit a bit
OR inclusivo bit a bit
Lógico
AND lógico
OR lógico
Condicional
Condicional
Not
Not
no disponible
no disponible
no disponible
no disponible
* (sólo modo
unsafe)
& (sólo modo
unsafe; vea
también fixed)
!
~
++
-sizeof
no disponible
And
Xor
Or
&
^
|
&
^
|
&
^
|
&
^
|
BITAND( )
BITXOR( )
no disponible
And
Or
&&
||
&&
||
&&
||
&&
||
AND
OR
?:
?:
?:
no disponible
IIf Function () ?:
36
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Puntero a miembro
Puntero a miembro
no disponible
Referencia
Referencia
no disponible
. (sólo modo
Unsafe)
no disponible
.* o bien ->
no disponible
no disponible
no disponible
no disponible
&
no disponible
@
(utilizar tipos de
referencia)
1. El operador de división se sobrecarga para controlar tanto una división de enteros como de punto flotante, en función de los operandos.
2. Los operadores postfijos tienen el máximo nivel de prioridad en la evaluación de expresiones.
3. Los operadores unarios aparecen delante del operando y se asocian de derecha a izquierda.
13. Tipos de datos comparados en diferentes lenguajes
En este tema se enumeran los tipos de datos de Visual Basic, Java, Visual C++, Visual C#, JScript y Visual FoxPro.
Tamaño de
Visual Basic
almacenamiento
16 bytes
no disponible
Decimal
Decimal NUEVO
(clase de .NET
Framework)
Fecha
Date NUEVO (clase de
.NET Framework)
(tamaño variable)
1 byte
2 bytes
2 bytes
C# NUEVO
Java
Visual C++
JScript
Visual FoxPro
no disponible
decimal
no disponible
no disponible
VARIANT
DECIMAL
Object
decimal NUEVO
DateTime NUEVO
(clase de .NET
Framework)
java.util.Date
DATE
java.lang.String
no disponible
System.DateTime. Date; DateTime
También el objeto
Date. para fechas en
JScript.
String NUEVO
no disponible
byte
Boolean
short
BYTE, bool
VARIANT_BOOL
signed short int,
__int16
String NUEVO (clase string
de .NET
Framework)
Byte
byte
Boolean
bool
Short, Char (carácter short, char (carácter
Unicode)
Unicode)
byte NUEVO
boolean NUEVO
short NUEVO, char
Variant
no disponible
Lógico
no disponible
no disponible
NUEVO
37
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
1 byte
4 bytes
no disponible
Integer
int
char
int
8 bytes
4 bytes
8 bytes
4 bytes en tabla
Long NUEVO
Single
Double
no disponible
long
float
double
no disponible
long
float
double
no disponible
signed char, __int8
long, (long int, signed
long int)
__int64
float
double
no disponible
Sbyte NUEVO
int NUEVO
Character
Integer
long NUEVO
float NUEVO
double NUEVO
no disponible
Tipo Float
no disponible
Double
General
38
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
14. Comparación de los controles y objetos programables de distintos lenguajes y bibliotecas
En este tema se enumeran los controles de Visual Basic 6.0, los controles de formularios Windows Forms, los controles de servidor de ASP.NET y
HTML, las clases de MFC y ATL, y los objetos de Visual FoxPro.
Objeto de Visual
Basic 6.0
Control de
formularios
Windows Forms
Control de
Control de servidor
servidor ASP.NET
HTML NUEVO
Clase de MFC
Clase de ATL
Objeto de Visual
FoxPro
NUEVO
NUEVO
ComboBox
ImageCombo
CheckBox
ComboBox
ComboBox
ComboBox
CommandButton
Button
Frame
OptionButton
GroupBox, Panel
RadioButton
CommonDialog
FileDialog,
PrintDialog,
ColorDialog,
FontDialog
ListBox
ListBox
Clases en System.IO no disponible
HscrollBar,
no disponible
VscrollBar
no disponible
no disponible
Label
Label
TextBox
TextBox
MainMenu,
no disponible
ListBox
FileSystemObject
HScrollBar,
VScrollBar
COOLBar
Label
TextBox
Menu
DropDownList
no disponible
CheckBox,
CheckBoxList
Button, LinkButton,
ImageButton
Panel
RadioButton,
RadioButtonList
no disponible
no disponible
no disponible
HtmlInputCheckBox
CComboBox
CComboBoxEx
CButton
no disponible
no disponible
no disponible
ComboBox
Image
CheckBox
HtmlInputButton,
CButton
HtmlButton
no disponible
no disponible
HtmlInputRadioButton CButton
no disponible
CommandButton
no disponible
no disponible
no disponible
CCommonDialog
no disponible
no disponible
OptionButton;
OptionGroup
CommonDialog;
GETFILE( ;
GETDIR( )
HtmlSelect
no disponible
no disponible
CListBox
CFile
CScrollBar
no disponible
no disponible
no disponible
ListBox
Varios functions
no disponible
no disponible
no disponible
HtmlInputText
no disponible
CRebarCtrl
CStatic
CEdit
CMenu
no disponible
no disponible
no disponible
no disponible
Toolbar
Label
TextBox; EditBox
Comandos de menú
39
APUNTES SOBRE C# y comparación otros lenguajes
Carlos Hernán Gómez G.
Form
ContextMenu
Las imágenes en los no disponible
controles admiten
GIF animados
Form
no disponible
Timer
DataGrid
Timer
DataGrid
DateTimePicker
ImageList
ListView
Internet Transfer
DateTimePicker
ImageList
ListView
Clases en
System.Net
MonthCalendar
Animation
MonthView
ProgressBar
PictureBox
RichTextBox
SSTab, TabStrip
StatusBar
Slider
Toolbar
TreeView
UpDown
WinSock
ProgressBar
PictureBox
RichTextBox
TabControl
StatusBar
Trackbar
Toolbar
TreeView
NumericUpDown,
DomainUpDown
Clases en
System.Net
no disponible
CAnimateCtrl
no disponible
no disponible
HtmlForm
CDialog,
CFormView
Form; FormSet
no disponible
DataGrid, DataList,
Repeater
no disponible
no disponible
no disponible
no disponible
no disponible
HtmlTable
CWnd::SetTimer
no disponible
CDialogImpl,
CWindow,
CWindowImpl
no disponible
no disponible
no disponible
no disponible
no disponible
HtmlInputFile
no disponible
no disponible
no disponible
no disponible
no disponible
ImageList
ListView
Explorador Web
Calendar
no disponible
CDateTimeCtrl
CImageList
CListCtrl
CHttpConnection,
CFtpConnection
CMonthCalCtrl
no disponible
no disponible
Image
no disponible
no disponible
no disponible
no disponible
no disponible
no disponible
no disponible
no disponible
HtmlInputImage
no disponible
no disponible
no disponible
no disponible
no disponible
no disponible
no disponible
CProgressCtrl
CPictureHolder
CRichEditCtrl
CTabCtrl
CStatusBarCtrl
CSliderCtrl
CToolBarCtrl
CTreeCtrl
CSpinButtonCtrl
no disponible
no disponible
no disponible
no disponible
no disponible
no disponible
no disponible
no disponible
no disponible
ActiveX Calendar;
MonthView
ProgressBar
no disponible
RichTextBox
SSTab
StatusBar
Slider
Toolbar
TreeView
Spinner
no disponible
no disponible
CSocket
no disponible
WinSock
Timer
Cuadrícula
40
Descargar