tipados - C#- los tipos estáticos no se pueden usar como argumentos de tipo
que es tipado en programacion (5)
Como las clases estáticas no se pueden crear instancias, nunca puede crear Argument<T>
con un tipo estático.
Tengo una clase genérica, que me ayuda a hacer verificaciones sobre los valores de los argumentos
internal sealed class Argument<T>
where T : class
{
private void TraceAndThrow(Exception ex)
{
new InternalTraceHelper<T>().WriteError(ex);
throw ex;
}
internal void ThrowNull(object value, string argName)
{
if (ReferenceEquals(value, null))
{
TraceAndThrow(new ArgumentNullException(argName));
}
}
internal void ThrowIf(bool condition, string argName)
{
if (condition)
{
TraceAndThrow(new ArgumentException(null, argName));
}
}
internal void ThrowNotInEnum(Type enumType, object value)
{
if (!Enum.IsDefined(enumType, value))
{
TraceAndThrow(new ArgumentOutOfRangeException(Resources.ArgEnumIllegalVal.InvariantFormat(value)));
}
}
}
Pero cuando intento usarlo con una clase estática:
internal static class Class1
{
private static Argument<Class1> _arg;
}
Recibí este error (en compilación):
los tipos estáticos no se pueden usar como argumentos de tipo
¿Qué estoy haciendo mal?
Como las clases estáticas no tendrán miembros de instancias, mi preocupación sería qué tipo de cosas haré con ellas.
Creo que, como no se pueden usar clases estáticas como argumentos genéricos, creo que se necesita esto con métodos de extensión en lugar de una clase genérica.
Lo que está haciendo mal es usar un tipo estático como argumento de tipo genérico.
Los genéricos solo funcionan con instancias, no clases estáticas.
Esto es deliberado.
Las clases estáticas intentan evitar el uso inapropiado, por lo que en casi todas las situaciones, no puede usarlas en situaciones en las que normalmente desea una instancia del tipo ... y eso incluye argumentos de tipo.
Consulte la sección 10.1.1.3.1 de la especificación C # 4 para el conjunto muy limitado de situaciones en las que puede hacer referencia a tipos de clases estáticas.