Restricciones en la aclaración de parámetros de tipo, por favor

¿Podría alguien aclarar qué significa el código?

public abstract class BaseJobProcessor<T> : JobProcessor where T : BaseQueueMessage  {}

Muchas gracias.

preguntado el 28 de agosto de 11 a las 04:08

2 Respuestas

public abstract class BaseJobProcessor<T> : JobProcessor where T :  BaseQueueMessage  {}

Es una definición de una clase genérica abstracta que tiene un parámetro de tipo T que es de tipo BaseQueueMessage . Causará un error de tiempo de compilación para intentar crear cualquier instancia de una clase genérica derivada de BaseJobProcessor y pasarle un parámetro de tipo de un tipo que no se derive de BaseQueueMessage.

Por lo general, esto se hace para que pueda hacer algunas suposiciones para T dentro del código de la clase BaseJobProcessor, en este ejemplo permitiría utilizar todos los métodos públicos y propiedades definidas en BaseQueueMessage en todas las instancias de tipo T que se crean / acceden dentro de BaseJobProcessor<T>. (Si no tuviera la restricción, solo podría usar object método / propiedades en cualquier instancia de tipo T)

Respondido 28 ago 11, 08:08

Significa que cualquier tipo que ocupe el puesto de T debe ser cualquiera BaseQueueMessage sí mismo, o una clase derivada de él.

Entonces puedes decir

public class MyQueueMessage : BaseQueueMessage { ... }

public class MyJobProcessor<T> : BaseJobProcessor<T> where T : BaseQueueMessage { ... }

MyJobProcessor<MyQueueMessage> jobProcessor = ...

Pero no puedes decir

MyJobProcessor<string> jobProcessor = 

Porque string no se deriva de BaseQueueMessage

Respondido 28 ago 11, 08:08

Gracias a todos, el ejemplo de todas las respuestas válidas de @ siride me ayudó a entender mejor: Nil Pun

@flybyte: pero tome nota del segundo párrafo de BrokenGlass, que explica otra razón por la que las restricciones son útiles. - siride

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.