Question

Pourquoi est-ce? Je trouverais vraiment agréable d'être en mesure d'avoir des méthodes d'extension verrouillés à utiliser que dans un de mes cours. Ne pas vraiment envie d'avoir certaines méthodes d'extension disponibles partout ... et ils ont l'air tellement mieux que les méthodes statiques régulières: P


Pour plus de précisions:

La raison pour laquelle je veux que ces méthodes d'extension est parce que je tends un formulaire, qui a un DataGridView sur elle. Et je deviens très fatigué de lignes comme celles-ci:

foreach(var row in grid.Rows.OfType<DataGridViewRow>().Where(r => (bool) r.Cells[checkBoxColumn.Index].Value))

foreach(var row in grid.SelectedRows.OfType<DataGridViewRow>().Where(r => (bool) r.Cells[checkBoxColumn.Index].Value))

Souhaite une méthode d'extension pour que je puisse faire juste

foreach(var row in grid.Rows.CheckedRows())

foreach(var row in grid.SelectedRows.CheckedRows())

En d'autres termes, cette méthode d'extension ne serait pas utile du tout en dehors de cette classe. Mais il serait le code un beaucoup plus propre. Peut bien sûr faire des méthodes régulières aussi, et c'est-ce que je fini par faire, car cela n'a pas été possible.

Aaanyways, j'étais juste curieux de savoir si quelqu'un avait quelques bons arguments pour expliquer pourquoi ils avaient choisi de mettre une restriction comme celui-ci où sur les méthodes d'extension peuvent utiliser créés. doit être dans une classe statique est logique totale. ne peut pas être dans une classe statique imbriquée ne pas ... du moins pour moi ...

Était-ce utile?

La solution

Would en utilisant une méthode d'extension vraiment faire votre code beaucoup plus propre que d'utiliser une méthode d'assistance standard sur votre classe?

// extension method
foreach (var row in grid.Rows.CheckedRows())
foreach (var row in grid.SelectedRows.CheckedRows())

// standard helper method
foreach (var row in CheckedRows(grid.Rows))
foreach (var row in CheckedRows(grid.SelectedRows))

Autres conseils

Si vous possédez le code source du type, pourquoi utilisez des méthodes d'extension vous? Pourquoi ne pas simplement faire ces méthodes d'extension membres du type lui-même?

Les méthodes d'extension sont mieux utilisées pour étendre les types que vous n'avez pas créé. Alors qu'ils sont des outils utiles, ils sont une couche d'indirection qui devrait être un dernier recours plutôt que d'une première. Alors que vous pouvez les utiliser pour étendre vos propres types, il est plus judicieux de réserver leur utilisation pour les types que vous n'avez pas créé.

Si vous prolongeons un type, puis les méthodes d'extension devraient être aussi accessibles equaly que le type lui-même.

Les meilleures pratiques suggèrent également mettre toutes les méthodes d'extension en un seul endroit, de préférence dans une classe statique ou contenu dans un seul espace de noms.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top