Zip, aunque no coincido con el tema de #region soy anti-code-folding :P
2009/5/7 Daniel Calvin <[email protected]>:
> Ahi ta mas lindo!!!!!
>
> El 7 de mayo de 2009 14:30, Leandro Tuttini <[email protected]>
> escribió:
>>
>> Hola, gracias a todos por las respuestas, fueron de utilidad.
>>
>> Modifique la implementacion quedando de esta forma:
>>
>>
>> private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable
>> pivotTable, ButtonFormatInfo format)
>> {
>> ApplyFormat<ButtonFormatInfo>(sheet, pivotTable,
>> (ButtonFormatInfo)format);
>> }
>>
>> private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable
>> pivotTable, FieldFormatInfo format)
>> {
>> ApplyFormat<FieldFormatInfo>(sheet, pivotTable,
>> (FieldFormatInfo)format);
>> }
>>
>> private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable
>> pivotTable, OriginFormatInfo format)
>> {
>> ApplyFormat<OriginFormatInfo>(sheet, pivotTable,
>> (OriginFormatInfo)format);
>> }
>>
>> private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable
>> pivotTable, BlankFormatInfo format)
>> {
>> ApplyFormat<BlankFormatInfo>(sheet, pivotTable,
>> (BlankFormatInfo)format);
>> }
>>
>>
>> private void ApplyFormat<T>(Office.Worksheet sheet, Office.PivotTable
>> pivotTable, T format) where T : FormatInfo
>> {
>>
>> }
>>
>>
>> Para utilizarlo hago lo siguiente:
>>
>> foreach (FormatInfo format in pivotTableInfo.Format)
>> ApplyFormat(sheet, pivotTable, format);
>>
>>
>> Y la verdad quedo bastante bien, por supuesto agregue todo en una #region
>> y quedo lindo.
>> Al menos me libre del interminable if.
>>
>> gracias
>>
>> --- El jue 7-may-09, Daniel Calvin <[email protected]> escribió:
>>
>> De: Daniel Calvin <[email protected]>
>> Asunto: [puntonet] Generics invocacion generica (utilizando typeof)
>> Para: [email protected]
>> Fecha: jueves, 7 de mayo de 2009, 11:59 am
>>
>> Hola Leandro
>>
>> Tal vez me equivoque, pero no me parace una buena forma de usar generics.
>>
>> Te doy mi opinion hacer:
>>
>> if (format is Mapping.PivotTableInfo.ButtonFormatInfo)
>> ApplyFormat<ButtonFormatInfo>(sheet, pivotTable,
>> (ButtonFormatInfo)format);
>>
>> no es una buena práctica
>>
>> Se me ocurren otras opciones:
>> en vez de :
>> private void ApplyFormat<T>(Office.Worksheet sheet, Office.PivotTable
>> pivotTable, T format) where T : FormatInfo
>> {
>> }
>>
>> hacer:
>> private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable
>> pivotTable, FieldFormatInfo format)
>> {
>> }
>>
>> private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable
>> pivotTable, ButtonFormatInfo format)
>> {
>> }
>>
>>
>> private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable
>> pivotTable, FormatInfo format)
>> {
>> }
>>
>>
>> Tener una firma por cada posible FormatInfo y uno que reciba el tipo base
>> para los que no requieren particularidades.
>>
>> Me parece lo mas sano.
>>
>> Yo al menos no usaría generics para esto o al menos de esa manera.
>>
>> En la práctica preguntar por un type es comprar problemas....
>>
>> Saludos
>>
>> Daniel Calvin
>>
>>
>> El 7 de mayo de 2009 10:55, Leandro Tuttini <[email protected]>
>> escribió:
>>>
>>> Hola,
>>>
>>> Les planteo la siguiente situacion.
>>>
>>> Tengo las siguientes clases:
>>>
>>> public abstract class FormatInfo
>>> {
>>> }
>>>
>>> public class FieldFormatInfo : FormatInfo
>>> {
>>> }
>>>
>>> public class ButtonFormatInfo : FormatInfo
>>> {
>>> }
>>>
>>> public class OriginFormatInfo : FormatInfo
>>> {
>>> }
>>>
>>> public class BlankFormatInfo : FormatInfo
>>> {
>>> }
>>>
>>>
>>> Y la siguiente implementacion:
>>>
>>>
>>> foreach (FormatInfo format in pivotTableInfo.Format)
>>> {
>>> //ApplyFormat<typeof(format)>(sheet, pivotTable, format);
>>>
>>> if (format is Mapping.PivotTableInfo.ButtonFormatInfo)
>>> ApplyFormat<ButtonFormatInfo>(sheet, pivotTable,
>>> (ButtonFormatInfo)format);
>>> else if (format is Mapping.PivotTableInfo.FieldFormatInfo)
>>> ApplyFormat<FieldFormatInfo>(sheet, pivotTable,
>>> (FieldFormatInfo)format);
>>> else if (format is Mapping.PivotTableInfo.OriginFormatInfo)
>>> ApplyFormat<OriginFormatInfo>(sheet, pivotTable,
>>> (OriginFormatInfo)format);
>>> else if (format is Mapping.PivotTableInfo.BlankFormatInfo)
>>> ApplyFormat<BlankFormatInfo>(sheet, pivotTable,
>>> (BlankFormatInfo)format);
>>>
>>> }
>>>
>>>
>>> pivotTableInfo.Format, es una propiedad del tipo:
>>>
>>> public List<FormatInfo> Format { get; set; }
>>>
>>>
>>> Y ApplyFormat() es un metodo:
>>>
>>> private void ApplyFormat<T>(Office.Worksheet sheet, Office.PivotTable
>>> pivotTable, T format) where T : FormatInfo
>>> {
>>> }
>>>
>>>
>>>
>>> Como veran funciona sin problema, pero la verdad no queda nada agradable
>>> a la vista, en realidad yo reduje un poco el ejemplo, hay unos 6 format mas
>>> que hacen el if
>>> bastante feo.
>>>
>>> por eso la cuestion es porque no puedo hacer algo asi:
>>>
>>> foreach (FormatInfo format in pivotTableInfo.Format)
>>> {
>>> ApplyFormat<typeof(format)>(sheet, pivotTable, format);
>>> }
>>>
>>> O sea la aplicacion del template seria dinamica.
>>>
>>> Se puede lograr algo parecido a esto ?, o la unica forma es con los if
>>> descubriendo el tipo.
>>>
>>> Saludos
>>> ________________________________
>>> Yahoo! Cocina
>>> Recetas prácticas y comida saludable
>>> Visitá http://ar.mujer.yahoo.com/cocina/
>>
>>
>> --
>> Daniel A. Calvin
>> Cooperator Team Member
>> http://www.cooperator.com.ar
>> Microsoft Certified Professional
>>
>> ________________________________
>> ¡Viví la mejor experiencia en la web!
>> Descargá gratis el nuevo Internet Explorer 8
>> http://downloads.yahoo.com/ieak8/?l=ar
>
>
> --
> Daniel A. Calvin
> Cooperator Team Member
> http://www.cooperator.com.ar
> Microsoft Certified Professional
>