2011-10-18 2 views
0

Désolé pour le titre déroutant. J'utilise un contorl tiers pour Spreads et il a un comboBoxCellType(). Dans mon code il y a comme 20 endroits que j'ai un code comme ceci:trouver le meilleur moyen d'appliquer une propriété au code

ComboBoxCellType cbo = new ComboBoxCellType() 
cbo.OtherStuff... 

maintenant je veux toutes les occurences de ces codes pour avoir une propriété supplémentaire appelée listwidth = 0; si quelque chose comme:

ComboBoxCellType cbo = new ComboBoxCellType() 
cbo.listwidth=0; 
cbo.OtherStuff 

un est juste de rechercher le code et l'ajouter manuellement. mais je me demandais s'il y avait une meilleure façon d'utiliser l'héritage et le dépassement pour le faire?

Répondre

1

Vous pouvez créer une classe statique pouvant être utilisée pour créer un nouveau ComboBoxCellType.

Quelque chose comme ceci:

public static class ComboBoxCellTypeFactory 
{ 
    public static ComboBoxCellType Create() 
    { 
     return new ComboBoxCellType(){listwidth = 0}; 
    } 
} 

Avec cela, vous pouvez nouvelles instances de haut ComboBoxCellType avec la propriété listwidth mis à 0 comme ceci:

ComboBoxCellType cbo = ComboBoxCellTypeFactory.Create(); 
cbo.OtherStuff... 
+0

Vous pouvez ensuite rechercher/remplacer des instances de 'ComboBoxCellType cbo = new ComboBoxCellType();' avec 'ComboBoxCellType cbo = ComboBoxCellTypeFactory.Create();'. –

+0

merci, je vais l'essayer maintenant ... – Bohn

+0

hmm..ce qui est cette erreur de compilation? "La classe statique 'MyApplication.ComboBoxCellTypeFactor' ne peut pas dériver du type 'FarPoint.Win.Spread.CellType.ComboBoxCellType' Les classes statiques doivent dériver de l'objet." – Bohn

1

Encapsulez la création et l'initialisation d'un ComboBoxCellType dans une méthode et appelez cette méthode à partir de tous les emplacements précédemment utilisés.

En général, si vous trouvez du code répétitif, voyez si vous pouvez extraire le code dans une méthode que vous pouvez appeler. Conservez votre code DRY.

Quelque chose comme:

private ComboBoxCellType BuildComboBoxCellType() 
{ 
    ComboBoxCellType cbo = new ComboBoxCellType() 
    cbo.listwidth=0; 
    cbo.OtherStuff... 

    return cbo; 
} 

Et dans votre code d'origine:

ComboBoxCellType cbo = BuildComboBoxCellType(); 
+0

hmm, sonne bien. pourriez-vous s'il vous plaît me montrer un échantillon de code que je peux avoir une idée? merci – Bohn

+0

ohok, merci ... bien cbo.OtherStuff est très différent dans différents endroits du code. ce n'est pas quelque chose que je peux facotr it. donc la seule chose commune à facotr est cbo.listwidth = 0; ... dans ce cas je touche toujours tous les endroits du code pour appliquer ce nouveau BuildComboBoxCellType() ... qui est encore comme écrire cbo.listwidth = 0 partout où c'est nécessaire. L'héritage ne fonctionne pas dans cette situation? – Bohn

+0

@BDotA - En fonction de ce que 'OtherStuff' est, vous pouvez être en mesure de factoriser à l'aide d'un délégué' Func 'ou' Action '. – Oded

0

Si vous avez accès au code source je suggère de placer un this.listwidth = 0 dans le constructeur de votre ComboBoxCellType.

+0

Je ne sais pas. c'est un contrôle commercial. (Farpoint Spread.) – Bohn

Questions connexes