Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

343
Vistas
Diferencia de método genérico entre Int32 e int

Tengo problemas para entender el método genérico en la interfaz. Estoy usando .NET Framework 4.8 con la versión automática de C#, por lo que debería ser C# 7.3. Ejemplo a continuación

La interfaz es:

 public interface IRegister { Nullable<T> Read<T>() where T: struct; void Write<T>(T value) where T : struct; }

Ahora alguna clase hereda de la interfaz:

 public abstract class AbstractRegister : IRegister { protected ModbusClient client; protected int Address; public abstract Nullable<T> Read<T>() where T : struct; public virtual void Write<T>(T value) where T : struct { return; } public AbstractRegister(int address, ModbusClient client) { this.client = client; this.Address = address; } }

Ahora tengo una clase heredada de AbstractRegister:

 class InputRegister_int : AbstractRegister { public InputRegister_int(int address, ModbusClient client) : base(address, client) { } public override int? Read<int>() { if (client == null) return null; return this.client.ReadInputRegisters(this.Address, 1)[0] as int?; } }

y en línea public override int? Read<int>() Tengo errores:

CS1001: Identificador esperado
CS1003: error de sintaxis, se esperaba '>'
CS1003: error de sintaxis, se esperaba '('

Estoy usando Visual Studio Community 2022

Cuando uso Int32 en lugar de int, todo funciona bien y casi resuelve mi problema, pero el tipo float (que es necesario para mí) no tiene representación Float.

Ya no tengo ideas para resolver este problema. ¿Alguien puede explicar me lo?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Esta respuesta es específicamente sobre "Int32" vs. int parte de la pregunta.

Int32 utilizado en el código como ejemplo de "esto funciona" no es en realidad System.Int32 (que es exactamente lo que es int ), sino simplemente un nombre que coincide con el nombre de algún tipo de sistema.

El siguiente código muestra un ejemplo más simple de esto: puede ver que "Int32" se comporta exactamente como cualquier otra cadena que no sea un nombre de tipo.

 using System; public class SomeClass { // exactly the same as T X<T>(), just using `Int32` as type parameter name Int32 X<Int32>() { return default(Int32); } // fails to compile as `System.Int32` and `int` are concrete types System.Int32 Y<System.Int32>() { return default(System.Int32); } int X<int>() { return default(int); } }

Convencionalmente, el nombre del parámetro de tipo en el método genérico comienza con T (solo T o tiene el prefijo TResult ), pero hay una regla en la especificación de C# que lo impone. Como resultado, cualquier cosa que no sea un nombre de tipo existente se considera "nombre del parámetro de tipo" siempre que se use en el lugar correcto void M<AnythingThatIsNotType>(...) .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda