les extiendo algunos de los tipos de datos básicos en vb.net para una aplicación de gran tamaño. Esto incluye integer
, string
, short
, etc. Tal como está, mis nuevos objetos de tipo de datos tienen nombres como MYInteger y MYString. Dado que estos son los únicos tipos que estoy usando para mi aplicación y en su mayoría son compatibles con los tipos por defecto, ¿hay alguna manera de reemplazar los valores predeterminados con el mío así que cuando Dim iThing as Integer
que en realidad estás usando mi tipo entero ligeramente a medida?¿Cómo puedo anular tipos básicos como entero, cadena, etc.?
Respuesta
No. Si pudiera, imagine el caos que podría causar. Habría dos posibilidades en este escenario:
Todo el código se ejecuta en el mismo proceso utilizaría esos tipos, incluso el código que no se lo esperaba. Malo.
Su concepto de
Integer
es diferente del concepto de CLR deInteger
, y de repente dos objetos del mismo tipo son diferentes. Malo.
Usted puede añadir métodos de extensión para tipos sellados. Algo así como:
Module MyExtensions
<Extension()>
Public Function Extended(i as Integer) As Integer
return i + 4
End Function
End Module
4.Extended() ' evaluates to 8
No estoy seguro de si realmente quieres hacer eso. Hará que sea más difícil de mantener en el futuro. ¿Por qué no simplemente usar MyInteger, etc. Si va a importar código fuente externa, acaba de hacer un descubrimiento & reemplazar.
Tenía miedo de no poder hacer eso. Es principalmente porque el código en cuestión va a ser trabajado por mucha gente y ya hemos tenido problemas con algunas personas que usan números enteros normales y algunas que usan el tipo personalizado y luego un montón de caos. Algunas funciones están escritas para usar las predeterminadas y otras como personalizadas y estaba buscando simplificar las cosas. – DynamiteReed
No sé si se aplica en su caso, pero a veces la gente quiere hacer lo que equivale a escalar "especializado"/tipos primitivos.
Por ejemplo, vea algunos de los tipos definidos en this codeplex project. Algunos de los tipos incluyen Latitud, Longitud, ángulo, etc. Cada uno de estos tipos es en realidad una estructura con un único elemento de datos, por lo general un doble, float, o int/larga, tales como este:
public struct Latitude : IFormattable, IComparable<Latitude>, IEquatable<Latitude>
{
private readonly double _DecimalDegrees;
//Some constants
//Some constructors
//Some static fields like...
public static readonly Latitude Equator = new Latitude(0.0);
public static readonly Latitude TropicOfCapricorn = new Latitude(-23.5);
public static readonly Latitude TropicOfCander = new Latitude(23.5);
//Some operators
public static Latitude operator +(Latitude left, Latitude right)
{
return new Latitude(left.DecimalDegrees + right.DecimalDegrees);
}
public static Latitude operator +(Latitude left, double right)
{
return new Latitude(left.DecimalDegrees + right);
}
}
Técnicamente , estos tipos son sólo clase o estructuras (principalmente structs en el caso del proyecto vinculado), sino que se utilizan para representar los valores que son a menudo (por lo general casi siempre ?, ??) los valores simplemente escalares. Si tiene un objeto que tiene una propiedad Ángulo, la mayoría de la gente probablemente lo haga doble.
public MyObject
{
public double AngleInDegrees { set; get; }
}
Cuando se asigna un valor a AngleInDegrees, MiObjeto podría querer hacer algo de procesamiento:
public double AngleInDegrees
{
get
{
return _AngleInDegrees;
}
set
{
if (value < 0 || value > 360)
{
_AngleInDegrees = NormalizeAngle(value);
}
else
{
_AngleInDegrees = value;
}
}
}
¿Y si tuviera una propiedad AngleInDegrees en muchos objetos? ¿Qué sucede si tiene una clase que consume ángulos producidos por otros componentes en su aplicación? ¿Quién debería hacer la validación? ¿Es útil contar siempre trabajando con ángulos "buenos"?
Al tener un tipo AngleInDegrees, es posible poner todas las operaciones de validación y especiales "Ángulo" en el tipo. También es posible escribir con fuerza todos los lugares donde desea usar AngleInDegrees.
Como dije, no sé si este es el tipo de cosa que está tratando de lograr o no. Se me acaba de ocurrir al leer su pregunta que tenía una especie de la misma idea cuando vi por primera vez el proyecto que he vinculado (es decir,que parecía que estaban, de hecho, subclasificando los tipos de datos primitivos para hacer tipos primitivos más restrictivos).
- 1. ¿Puedo anular con tipos derivados?
- 2. Cuándo usar tipos básicos (Entero, Cadena), y cuándo escribir una nueva clase?
- 3. clojure - forma correcta de anular localmente operadores como "+", "*", etc.
- 4. Cómo concaturar tipos de datos como enteros (entero con entero) & varchar (varchar con varchar) en mysql?
- 5. Arrays asociativos PHP: cómo tratar un entero como una cadena
- 6. Encurtido ligero para tipos básicos en pitón?
- 7. ¿Cómo puedo formatear un entero largo como una cadena sin separador en Java?
- 8. cómo pasar un entero como ConverterParameter?
- 9. ¿Cómo puedo convertir una cadena en entero con ceceo común?
- 10. Entero como tipo primitivo
- 11. ¿Puedo serializar tipos anónimos como xml?
- 12. ¿Cómo se relacionan los tipos básicos de Delphi entre sí?
- 13. Tipos básicos para exponer en una API de C++
- 14. Analizando la cadena "009" como un entero en javascript?
- 15. ¿Cómo obtener un entero de MySQL como número entero en PHP?
- 16. Convertir std :: cadena en entero
- 17. ¿Cómo puedo restaurar/etc/nginx?
- 18. convertir un número entero en una cadena como 3
- 19. Cadena binaria al número entero
- 20. ¿Cómo revertir un número como un entero y no como una cadena?
- 21. Cómo convertir cadena a entero en UNIX
- 22. ¿Cómo puedo pasar tipos complejos como objetos usando servicios web?
- 23. Conversión de entero en cadena
- 24. destructores de tipos internos (int, char, etc ..)
- 25. ¿Cómo puedo almacenar tipos de Java, permitiendo solo algunos específicos?
- 26. Cómo convertir cadena a entero en C#
- 27. ¿Cómo verificar si dos tipos se pueden comparar, resumir, etc.?
- 28. Visual C++ no puede encontrar "tipos de Windows" como, por ejemplo, PVOID, DWORD, ULONG, etc.
- 29. ¿Cómo extender los tipos incorporados de C#, como String?
- 30. ¿Cómo convertir una cadena en un tipo entero poco común?
¿Hay alguna razón por la que tenga que usar nuevos tipos primitivos? ¿Por qué no podrías usar los métodos de extensión? – cdhowie
Creo que rompe casi todas las reglas de programación. Sin embargo, tampoco creo que sea posible. En general, parece un buen candidato para los métodos de extensión. – Inisheer
Primero compruebe si el programa de protección de testigos del FBI también es accesible para los programadores que han renunciado recientemente a su trabajo. –