ejemplos - int equals c#
c#: diferencia entre "System.Object" y "object" (8)
En C #, ¿hay alguna diferencia entre usar System.Object
en el código en lugar de solo object
, o System.String
lugar de string
y así sucesivamente? ¿O es solo una cuestión de estilo?
¿Hay alguna razón por la cual una forma es preferible a la otra?
El tipo de objeto es un alias para System.Object . El tipo de objeto se usa y se muestra como una palabra clave. Creo que tiene algo que ver con el legado, pero eso es solo una suposición descabellada.
Eche un vistazo a esta página de MSDN para más detalles.
Prefiero el uso de las versiones en minúscula, pero sin motivos especiales. Solo porque el resaltado de sintaxis es diferente en estos tipos "básicos" y no tengo que usar la tecla Mayús al escribir ...
No hay diferencia Hay una serie de tipos, llamados Tipos de datos primitivos que son amenazados por el compilador en el estilo que usted mencionó.
El estilo de denominación en mayúsculas es la regla de denominación ISO. Es más general, común; fuerza las mismas reglas de denominación para todos los objetos en la fuente sin excepciones como el compilador C #.
Por lo que sé, sé que es un atajo, es más fácil usar cadena, en lugar de System.string.
Pero tenga cuidado de que haya una diferencia entre cadena y cadena (c # es sensible a las mayúsculas y minúsculas)
Uno es un alias para el otro. Se reduce al estilo.
string
(con la "s" minúscula) es el tipo de cadena del lenguaje C # y el tipo System.String
es la implementación de string
en .NET framework.
En la práctica, no hay diferencia además de las estilísticas.
EDITAR: Dado que lo anterior obviamente no era lo suficientemente claro, no hay diferencia entre ellos, son del mismo tipo una vez compilados. Estaba explicando la diferencia semántica que ve el compilador (que es simplemente azúcar sintáctica, muy similar a la diferencia entre un ciclo y un ciclo).
string
es un alias para global::System.String
. Es simplemente azúcar sintáctica. Los dos son exactamente intercambiables en casi todos los casos, y no habrá diferencia en el código compilado.
Personalmente utilizo los alias para nombres de variables, etc., pero utilizo los nombres de tipo CLR para nombres en API, por ejemplo:
public int ReadInt32() // Good, language-neutral
public int ReadInt() // Bad, assumes C# meaning of "int"
(Tenga en cuenta que el tipo de devolución no es realmente un nombre, está codificado como un tipo en los metadatos, por lo que no hay confusión allí).
Los únicos lugares que conozco donde uno puede usarse y el otro no (de lo que soy consciente) son:
-
nameof
prohíbe el uso de alias - Al especificar un tipo subyacente base enum, solo se pueden usar los alias
string
es un alias para global::System.String
y object
for global::System.Object
Siempre que tengas using System;
en su clase, String
/ string
y Object
/ object
son funcionalmente idénticos y el uso es una cuestión de estilo.
(EDITAR: se eliminó una cita ligeramente engañosa , según el comentario de Jon Skeet)
object , int , long y bool se proporcionaron como ruedas de entrenamiento para los ingenieros que tenían problemas para adaptarse a la idea de que los tipos de datos no eran una parte fija del lenguaje. C #, a diferencia de los idiomas anteriores, no tiene límite en la cantidad de tipos de datos que puede agregar. La biblioteca ''System'' proporciona un kit de inicio que incluye tipos útiles como System.Int32 , System.Boolean , System.Double , System.DateTime , etc., pero se recomienda a los ingenieros que agreguen los suyos propios. Debido a que Microsoft estaba interesado en la rápida adopción de su nuevo idioma, proporcionaron alias que lo hicieron parecer como si el lenguaje fuera más parecido a "C", pero estos alias son una característica completamente desechable (C # sería un lenguaje tan bueno si eliminado todos los alias de compilación, probablemente mejor).
Si bien StyleCop impone el uso de los alias de estilo C heredados, es una imperfección en un conjunto de reglas que, de otro modo, sería lógico. Hasta el momento, no he escuchado una sola justificación para esta regla (SA1121) que no se basó en el dogma. Si cree que SA1121 es lógico, ¿por qué no hay ningún tipo de buildin para datetime ?