Las restricciones se "editan" juntas; all las restricciones deben ser satisfechas.
bajo qué circunstancias puede ser tanto T un no anulable tipo de valor y también ser convertir implícitamente a la MyBase clase a través de la identidad, el boxeo o referencia conversión?
No existen tales circunstancias, por lo que no existe un posible argumento de tipo que satisfaga las restricciones de T. En lugar de dejar que defina un conjunto de restricciones que no se pueden cumplir, el compilador simplemente no lo permite. No puede indicar que necesita la restricción struct
y una restricción class type
.
estoy usando struct para constreñir a las enumeraciones
que ilustra mi punto. Como no hay enumeraciones que hereden de MyBase
, no se pudo cumplir la restricción.
¿Puedes describirme qué pensabas que significaba esto? Por ejemplo, ¿creía que significaba "cualquier tipo de valor que no admite nulos o de cualquier tipo que sea convertible a MyBase"? Estoy interesado en aprender por qué las personas creen cosas falsas sobre C# para que pueda tratar de mejorarlo.
ACTUALIZACIÓN: Ah, ya veo - MyBase está destinado a ser la clase base de MyClass<T>
, no la clase base de T
. En C#, que va:
class [class name] < [generic type parameters] >
: [base classes and interfaces]
where [type parameter] : [constraints]
usted tiene que poner la base de clases e interfaces antes de las limitaciones, de lo contrario el compilador piensa que son las restricciones.
gracias a todos por sus diferentes opciones debido a que ustedes lo leen de diferentes maneras. –
Las malas noticias viajan despacio, no puede restringir un argumento de tipo a System.Enum. La historia no fue amable con las enumeraciones, se volvieron estructuralmente incompatibles al tener diferentes tamaños para su tipo de implementación. Una optimización demasiada en el lenguaje C, pegado a C# debido a la interoperabilidad. –