Estoy migrando una aplicación de .NET 1.1 a .NET 2.0. ¿Debo eliminar todos los usos de CollectionBase? De ser así, ¿cuál es la mejor estrategia para la migración?CollectionBase vs generic
Respuesta
Sí, las mejores clases para mirar están en System.Collections.Generic.
Normalmente uso List.
Hay dos enfoques que puede utilizar:
Un
public class MyClass
{
public List<MyItem> Items;
}
B
public class MyItemCollection : List<MyItem>
{
}
public class MyClass
{
public MyItemCollection Items;
}
Los dos enfoques sólo se diferencian muy poco y sólo necesitan utilizar método (B) si planea ampliar la funcionalidad de List.
Aquí hay un enlace con más información:
http://msdn.microsoft.com/en-us/library/6sh2ey19(VS.80).aspx
Con respecto a las clases que ya haya implementado, puede quitar todas las funciones que se especifican en la interfaz IList. p.ej.
public int Add(InstrumentTradeDataRow instTrade) { return List.Add(instTrade); }
Esto se puede eliminar porque List ya implementa una función de tipo seguro Agregar para usted.
ver este enlace para más información:
http://msdn.microsoft.com/en-us/library/3wcytfd1(VS.80).aspx
prefiero Marcos Ingram A) enfoque, posiblemente con una clase base se escribe a sí mismo.
Hay otro problema con la migración a los genéricos; la conversión tiene una tendencia a tener un cierto efecto viral. Puede que le resulte imposible detenerse antes de terminar. Si pensabas que pasarías un par de horas haciendo ALGUNOS medicamentos genéricos, a menudo te encontrarás pasando varios días haciendo TODOS los medicamentos genéricos.
Puede/debe evitar esto dando a sus nuevas clases sobrecargas de operadores a/de la lista
public static implicit operator MyClass(List m)
{
// code to convert from m to MyClass
}
public static explicit operator List(MyClass m)
{
// code to convert from MyClass list
}
Estos son realmente sólo paliativos. Puede usar "encontrar usos" en estos en cualquier etapa posterior para determinar qué lugares no se han convertido completamente. Cuando se eliminan todos los usos, puede eliminar los moldes.
Por lo general, perfero hacer explícito el reparto de MyClass a List (esta es la forma en que no desea ir) y el otro implícito.
El mejor enfoque normalmente sería comenzar en la parte superior de las capas, cerca de la capa de presentación y trabajar hacia abajo. (Esto es lo opuesto a lo que podría pensar. Si realiza el reparto de MyClass a List implícito, no importa qué final comience)
Generalmente, List<T>
hace la mayor parte de lo que normalmente desea. Si desea personalizar el comportamiento, debe heredar de Collection<T>
- esto tiene virtual
métodos para que pueda ajustar el comportamiento al agregar/eliminar/actualizar, etc. No puede hacer esto con List<T>
ya que no hay métodos (uesus) virtual
.
Desafortunadamente 'Collection
@abatishchev - no, pero 'InsertItem' * es * (que maneja' Add' y 'Insert'), al igual que' SetItem' (que maneja la reasignación) –
Sí, tienes razón, me apresuré un poco, ¡Gracias! – abatishchev
- 1. ¿La clase CollectionBase aún es compatible?
- 2. Modelado de series de tiempo en f # - seq vs array vs vector vs list vs generic list
- 3. .NET Casting Generic List
- 4. f # generic type comparison
- 5. Implementa C# Generic Timeout
- 6. ASP.NET Generic Handlers & Session
- 7. .NET Generic Set?
- 8. Generic ThreadPool en .NET
- 9. Generic GLSL Lighting Shader
- 10. C# Generic Copy Constructor
- 11. Generic Soap Client en Java
- 12. Self-closing Html Generic Control?
- 13. Asp.NET Handler y Generic Handler
- 14. ¿Es Delphi generic TInterfaceList posible?
- 15. Generic Linear Piecewise Lookup Table
- 16. C# Get Generic Type Name
- 17. Adición IEnumerable <T> a clase derivada de CollectionBase
- 18. Generic CRUD admin for Flask, with WTForms?
- 19. C# exit generic ForCada que utiliza lambda
- 20. return unknown Generic List <T>
- 21. List.Contains (item) with generic list of objects
- 22. scala generic y console auto complete
- 23. XmlSerializer serialize generic Lista de interfaz
- 24. Django Class-Based Generic Views y ModelForms
- 25. C# LINQ to SQL: Refactorizando este método Generic GetByID
- 26. Mono.Cecil: llame al método GENERIC base class 'de otro ensamblado
- 27. Django Class Based Generic Views URL Variable Pasando
- 28. Convertir CollectionBase a la lista o tipo de datos utilizables con Linq
- 29. J2ME VS Android VS iPhone VS Symbian VS Windows CE
- 30. TagSoup vs Jsoup vs HTML Analizador vs vs HotSax
me puede dar un ejemplo. . – leora
Hecho. ¿Algo más que te gustaría ver? –
qué hago con el código existente como esto: \t int público Add (InstrumentTradeDataRow instTrade) \t \t { \t \t \t retorno List.Add (instTrade); \t \t} – leora