Espero haberlo omitido en los documentos. ¿Hay alguna manera de declarar un sinónimo de tipo en C#?Declarar un sinónimo de tipo en C#
Respuesta
Usted puede utilizar la instrucción using para crear un alias para un tipo.
Por ejemplo, lo siguiente será crear un alias para System.Int32
llamada MyInt
using MyInt = System.Int32;
Alternativamente, se puede utilizar la herencia para ayudar en algunos casos. Por ejemplo
Crear un tipo People
que es un List<Person>
public class People: List<Person>
{
}
No es un alias, pero sí simplificar las cosas, especialmente para los tipos más complejos de este tipo
public class SomeStructure : List<Dictionary<string, List<Person>>>
{
}
y ahora se puede use el tipo SomeStructure
en lugar de esa divertida declaración genérica.
Para el ejemplo que tiene en sus comentarios, para un Tuple
podría hacer algo como lo siguiente.
public class MyTuple : Tuple<int, string>
{
public MyTuple(int i, string s) :
base(i, s)
{
}
}
Actualice para incluir algunas alternativas, en función de su comentario que hace referencia a Tuple. –
Así que realmente, la respuesta es no, al menos no como en Haskell. 'using' scopes el sinónimo del archivo local, y no puede definir dos sinónimos diferentes para el mismo tipo. La herencia, además de ser _vil_ en sí misma, no se aplica a las clases selladas como String, que son los tipos que usualmente estamos más interesados en crear sinónimos. Una forma adicional de "crear" sinónimos sería la encapsulación o adaptadores. Cree una clase 'MyTuple' que tenga una instancia de' Tuple' oculta adentro, y reenvíe todas las llamadas a ella (por supuesto, debe implementar todas las interfaces del tipo encapsulado). – drozzy
También puede usar extensiones para extender una clase sin tener que heredarla o modificarla directamente. Por ejemplo, puede agregar métodos a la clase String, @drozzy. http://msdn.microsoft.com/en-us/library/bb383977.aspx – ps2goat
¿Existe alguna manera de declarar un sinónimo de tipo en C#?
Nº
Puede crear un alias con el uso, sino que se limita a la 1 archivo (espacio de nombres).
Hay 1 truco: http://stackoverflow.com/a/41704128/3241228. Esta no es la solución para ningún caso, pero es mejor que nada – user1234567
Tal vez usted está buscando Using Alias Directives:
using MyType = MyNamespace.SomeType;
Esto permite, en su código, tipo:
// Constructs a MyNamespace.SomeType instance...
MyType instance = new MyType();
gracias. una abrumadora cantidad de respuestas. :) Supongo que lo extrañé. aunque una advertencia aquí es que no puedo usar este sinónimo en otros archivos ... eso estaría bien. – akonsu
@akonsu: No, es una compilación en tiempo de compilación, por lo que es por archivo (técnicamente, por unidad de compilación o espacio de nombres; puede ser solo válido para ** parte ** de un archivo, dependiendo de dónde lo haya puesto). Debe copiar esto en cualquier archivo donde desee usarlo. Sin embargo, es lo más parecido que C# tiene a un "sinónimo de tipo". –
Suena como si estuviera hablando de un alias que se puede declarar en sus declaraciones using
en la parte superior de sus codefiles:
using MyDate = System.DateTime;
Ésta no es la forma más sencilla de resolver este problema pero cuando necesito un sinónimo tipo, creo una clase con conversiones implícitas hacia y desde el tipo de destino, por ejemplo:
El nombre dado necesita ser sinónimo de cadena, Luego puede hacer lo siguiente:
public class Name
{
public string Value;
public static implicit operator string(Name name) { return name.Value; }
public static implicit operator Name(string name) { return new Name {Value = name}; }
}
Lo que le dará la capacidad de usar el tipo de nombre alrededor de su código y el compilador le permitirá asignarle valores también a partir de una cadena.
Si ha la firma siguiente método:
public void SomeMethodThatNeedsName(Name name)
Usted puede hacer esto:
SomeMethodThatNeedsName("aNameThatComesFromString")
- 1. Haskell tipo sinónimo
- 2. Declarar un tipo de datos de forma dinámica en C++
- 3. declarar typedef tipo
- 4. ¿Es posible tener un sinónimo de tipo asociado con variables no mencionadas en la clase de tipo?
- 5. ¿Cómo puedo declarar un puntero basado en un tipo genérico?
- 6. Declarar explícitamente un tipo de variable en Python
- 7. Cómo declarar un puntero vacío en C#
- 8. ¿Cómo declarar un Guid constante en C#?
- 9. Declarar vectores en un archivo de encabezado de C++
- 10. ¿Es posible declarar un alias con el tipo .net?
- 11. Sql Server 2008 - Dejar caer un sinónimo
- 12. Declarar una instancia de tipo genérico dinámicamente
- 13. Cómo hacer correctamente un sinónimo público
- 14. php: declarar argumentos tipo de una función
- 15. Declarar una variable usando un tipo de variable
- 16. cómo declarar cadenas en C
- 17. variables Declarar a ser de cierto tipo
- 18. fetch sinónimo de una palabra
- 19. Reenviar declarar una estructura en Objective-C
- 20. Declarar un objeto antes de inicializarlo en C++
- 21. MethodInfo Igualdad para declarar el tipo
- 22. Cómo declarar una restricción genérica que es un tipo genérico
- 23. Declarar una variable en un bloque if-else en C++
- 24. ¿Cómo declarar una matriz bidimensional de tipo de cadena en Objective-C?
- 25. ¿Puedo declarar una variable de tipo 'protocolo' en una interfaz Objective-C?
- 26. ¿Cómo cambiar un tipo de variable en C#?
- 27. define un sinónimo para una macro de Clojure
- 28. ¿Cuál es la sintaxis para declarar un evento en C#?
- 29. ¿Qué puedo "reenviar declarar" en C++?
- 30. ¿La palabra "lexer" es un sinónimo de la palabra "analizador"?
que significa un alias de un 'string' La verdad es' System.String'? –
sí. MyTuple = Tuple –
akonsu