typedef

27/05/2004 - 18:46 por Javier M Mora | Informe spam
Por dar limpieza y claridad a mi código, pretendo añadir alias de tipos
y además así que el compilador me haga comprobación estática de tipos.
Me explico:

Tengo variables int que (por ejemplo) representan metros y otras que
representan segundos. Lo que quiero es que el compilador proteste si en
algún caso sumo metros con segundos (aunque no es un error de sintaxis
del programa porque ambos son enteros si sería un error en la lógica del
programa).

En C++ se podía hacer con typedef. He visto que en C# no existe dicho
procedimiento. Así que se me ocurrió hacer algo como esto:

class Metros: System.Int32 {}
class Segundos: System.Int32 {}

Para crear 2 clases que aunque tengan el mismo contenido no pueden ser
sumadas por que no tienen el operador + sobrecargado. Pero el compilador
se queja porque no se pueden derivar clases de System.Int32:

error CS0509: class `Metros': Cannot inherit from sealed class
`System.Int32' (a class can not inherit from a struct/enum)

¿Existe alguna forma de hacer esta comprobación estática de tipos?
(Además de hacer dos clases/estructuras completas, que me parece un
despilfarro:

struct Metros { int valor }
struct Segundos { int valor }
)

Quizás estoy pensando aún con el chip de C++. Si esto no se puede hacer
en C# ¿cómo sería la forma más apropiada de hacerlo?

Javier Maria Mora Merchan
(GPGP) Key ID: 0x794F3D83
 

Leer las respuestas

#1 Francisco García
27/05/2004 - 20:17 | Informe spam
Puedes usar el operador typeof para conocer el objeto System.Type.
Tambien puedes usar el metodo GetType() para obtener el tipo.
ejemplo:
if( txtbox1.GetType() == typeof(TextBox))
txtbox1.Text = txtbox1.GetType().ToString();

Int32 es una enumeracion por eso no la heredas.

"Javier M Mora" escribió en el mensaje
news:
Por dar limpieza y claridad a mi código, pretendo añadir alias de tipos
y además así que el compilador me haga comprobación estática de tipos.
Me explico:

Tengo variables int que (por ejemplo) representan metros y otras que
representan segundos. Lo que quiero es que el compilador proteste si en
algún caso sumo metros con segundos (aunque no es un error de sintaxis
del programa porque ambos son enteros si sería un error en la lógica del
programa).

En C++ se podía hacer con typedef. He visto que en C# no existe dicho
procedimiento. Así que se me ocurrió hacer algo como esto:

class Metros: System.Int32 {}
class Segundos: System.Int32 {}

Para crear 2 clases que aunque tengan el mismo contenido no pueden ser
sumadas por que no tienen el operador + sobrecargado. Pero el compilador
se queja porque no se pueden derivar clases de System.Int32:

error CS0509: class `Metros': Cannot inherit from sealed class
`System.Int32' (a class can not inherit from a struct/enum)

¿Existe alguna forma de hacer esta comprobación estática de tipos?
(Además de hacer dos clases/estructuras completas, que me parece un
despilfarro:

struct Metros { int valor }
struct Segundos { int valor }
)

Quizás estoy pensando aún con el chip de C++. Si esto no se puede hacer
en C# ¿cómo sería la forma más apropiada de hacerlo?

Javier Maria Mora Merchan
(GPGP) Key ID: 0x794F3D83


Preguntas similares