En Java, puedo hacer lo siguiente: (a asumir Subclass se extiende Base):

ArrayList<? extends Base> aList = new ArrayList<Subclass>();

¿Cuál es el equivalente en C# .NETA? No hay ? extends palabra clave al parecer, y esto no funciona:

List<Base> aList = new List<Subclass>();
  • Realmente no existe un equivalente en .net, gracias a dios
  • ¿por qué es una buena cosa?
  • Su ejemplo muestra rotos tipo de variación en java, .net no han roto la varianza.. bueno, aparte de un lugar.
  • roto el tipo de variación?
  • posibles duplicados de C# herencia en los genéricos pregunta
InformationsquelleAutor Louis Rhys | 2011-01-19

4 Comentarios

  1. 94

    Realidad hay un Equivalente(más o menos), el where palabra clave. No sé cómo «cerrar» lo es. Yo tenía una función que yo necesitaba hacer algo similar.

    He encontrado un página de msdn sobre ella.

    No sé si usted puede hacer esto en línea para una variable, pero de una clase que puede hacer:

    public class MyArray<T> where T: someBaseClass

    o para una función

    public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass

    No veo en la página, pero el uso de la where palabra clave podría ser posible para una variable.

    • Hermoso, casi exactamente lo que yo estaba buscando. Gracias! clase pública ImplementingClass<T> : Clasebase<T> donde T : GenericBaseClass { … }
    • Esta respuesta realmente califica como una respuesta
    • Lo que una fea manera de tener para lograr esto, pero al menos se hace el trabajo! +1
    • responder esta pregunta, la cual está relacionada a su respuesta?
    • Aquí es otra variación, donde la clase debe implementar IDisposable además someBaseClass. clase pública MyArray<T> : IDisposable donde T: someBaseClass
    • ¿Cómo puedo usar esto para restringir T a números, tales como float o int?
    • Usted tiene que utilizar la Clase de versión del tipo numérico.

  2. 8

    Mirar en Covariance y Contravariance introducido con .Net 4.0. Pero sólo funciona con interfaces ahora.

    Ejemplo:

    IEnumerable<Base> list = new List<SubClass>();
    • Sólo mirando este hilo, tratando de entender el C# modo de genéricos. Lo que sucede, si el tipo estático de su ejemplo es List<Base>, y si quiero agregar un Base implementador, que no es un ejemplo de SubClass? Tendrá que ser un error de tiempo de ejecución?
    • responder esta pregunta, la cual está relacionada a su respuesta?
  3. 6

    No hay exacta equivalente (ya que el tipo de sistema no funciona de la misma manera, con el tipo de borrado y todo), pero usted puede obtener una funcionalidad similar con in y out utilizando covarianza y contravarianza.

    • responder esta pregunta, la cual está relacionada a su respuesta?
    • Posiblemente, pero no tengo el tiempo ahora por desgracia…
    • Tengo este problema ya que el número de días, y esta es la segunda vez que me preguntó dicha cuestión, no puede conseguir que por qué la gente no puede responder hasta el punto de
    • A primera vista, al menos, se ve como un «XY problema». ¿Qué son los que la verdad tratando de hacer? Estás tratando de construir algo? Porque probablemente hay una manera de hacerlo, que no implica que coincidan exactamente con el Java semántica (que puede incluso no ser posible).
    • Sí, yo realmente quiero hacer con o sin coincide exactamente con la de Java semántica, pero el resultado final (funcionalidad) debe ser el mismo en la mayoría de los
    • Es esto realmente una pregunta difícil de responder y por el camino, a menos que la gente utiliza para acercarse a esta pregunta? Espero que haría ayuda en este sentido 🙂
    • por favor como hacer ping a mí que va a ayudar en este sentido (así que voy a esperar) o tengo que ir a por algún otro?

  4. 1

    Si usted está buscando para los dos tipos genéricos, echa un vistazo a esto:

        void putAll<K1, V1>(Dictionary<K1,V1> map) where K1 : K where V1 : V;
    • responder esta pregunta, la cual está relacionada a su respuesta?

Dejar respuesta

Please enter your comment!
Please enter your name here