2011-02-18 16 views
8

¿Cuál es el propósito de new() mientras se declara la clase BaseEntityCollection?
Si voy a quitar, lo tengo un error con el siguiente mensaje "T debe ser un tipo no abstracto con un constructor sin parámetros pública con el fin de utilizarlo como parámetro ..."¿Cuál es el propósito de new() mientras se declara una clase genérica?

public abstract partial class BaseEntityCollection<T> : 
     List<T> where T : BaseEntity, new() 

Respuesta

18

Significa que cualquiera sea la clase que especifique para T, tiene un constructor predeterminado (sin parámetros).

Por lo tanto, en la clase genérica, se puede hacer new T() y se creará un nuevo objeto de tipo T.

1

El tipo T tiene que tener un constructor sin parámetros. Esto le permite crear nuevas instancias haciendo var t = new T() que de otro modo sería imposible.

4

Escribir new() obliga al parámetro a tener un constructor predeterminado.

Sin él, no puede escribir new T().
Su error ocurre cuando intenta pasar un tipo no new() como un parámetro new() 'd.


También, do not inherit List<T>.
En su lugar, debe heredar Collection<T>, que está diseñado para la herencia.

+0

Si voy a utilizar Collectiion , ¿cómo puedo crear un nuevo objeto de colección que herede de la Colección ? – Ahmed

+1

@Ahmed: solo heredarlo. – SLaks

1

Es la notación para la restricción genérica : Debe tener un constructor sin parámetros (público).

0

Esa es una de las posibles "restricciones de tipo genérico" que puede asociar con su tipo genérico. Usar la restricción "new()" solo le permitirá usar un tipo genérico si tiene un constructor sin parámetros. Esto puede ser útil para cosas como la serialización, o de tipo fábrica de métodos, donde se necesita para crear un objeto de tipo T.

Aquí están algunas otras restricciones de tipo genérico: http://msdn.microsoft.com/en-us/library/d5x73970(v=vs.80).aspx

1

Esto significa que su tipo genérico tiene tener constructor sin parámetros.

BaseEntityCollection<T> : List<T> 

No estoy seguro de qué estás haciendo aquí, pero creo que va en contra de la regla de Liskov. Verifica tu jerarquía

Constraints on Type Parameters

+0

¿Cuál es la regla de Liskov? – Ahmed

Cuestiones relacionadas