2010-09-03 21 views
6

quiero heredar de algún tipo de/vector/clase lista de arreglo para que pueda agregar sólo un método especializado adicional a ella .... algo como esto:¿Cómo puedo heredar de ArrayList <MyClass>?

public class SpacesArray : ArrayList<Space> 
{ 
    public Space this[Color c, int i] 
    { 
     get 
     { 
      return this[c == Color.White ? i : this.Count - i - 1]; 
     } 
     set 
     { 
      this[c == Color.White ? i : this.Count - i - 1] = value; 
     } 
    } 
} 

Sin embargo, el compilador no le permitirá yo. Dice

El tipo no genérico 'System.Collections.ArrayList' no se puede usar con argumentos de tipo

¿Cómo puedo resolver esto?

Respuesta

11

ArrayList no es genérico. Use List<Space> desde System.Collections.Generic.

2

No hay ArrayList<T>. List<T> funciona bastante bien en su lugar.

public class SpacesArray : List<Space> 
{ 
    public Space this[Color c, int i] 
    { 
     get 
     { 
      return this[c == Color.White ? i : this.Count - i - 1]; 
     } 
     set 
     { 
      this[c == Color.White ? i : this.Count - i - 1] = value; 
     } 
    } 
} 
+0

Parece 'List ' no funciona * bastante * como una matriz. Tienes que agregarle elementos antes de que puedas establecerlos ... 'this.AddRange (Enumerable.Repeat (Space.Empty, capacity))'. Oh, bueno, funciona lo suficientemente bien :) – mpen

2

Puede crear una envoltura alrededor de ArrayList<T>, que implementa IReadOnlyList<T>. Algo como:

public class FooImmutableArray<T> : IReadOnlyList<T> { 
    private readonly T[] Structure; 

    public static FooImmutableArray<T> Create(params T[] elements) { 
     return new FooImmutableArray<T>(elements); 
    } 

    public static FooImmutableArray<T> Create(IEnumerable<T> elements) { 
     return new FooImmutableArray<T>(elements); 
    } 

    public FooImmutableArray() { 
     this.Structure = new T[0]; 
    } 

    private FooImmutableArray(params T[] elements) { 
     this.Structure = elements.ToArray(); 
    } 

    private FooImmutableArray(IEnumerable<T> elements) { 
     this.Structure = elements.ToArray(); 
    } 

    public T this[int index] { 
     get { return this.Structure[index]; } 
    } 

    public IEnumerator<T> GetEnumerator() { 
     return this.Structure.AsEnumerable().GetEnumerator(); 
    } 

    IEnumerator IEnumerable.GetEnumerator() { 
     return GetEnumerator(); 
    } 

    public int Count { get { return this.Structure.Length; } } 

    public int Length { get { return this.Structure.Length; } } 
} 
Cuestiones relacionadas