9

为什么是这样?我会发现能够将一些扩展方法锁定为仅在我的一个类中使用真的很好。真的不想让某些扩展方法随处可用......而且它们看起来比常规静态方法好得多:P


为了澄清:

我想要这些扩展方法的原因是因为我正在扩展一个表单,它上面有一个 DataGridView。我已经厌倦了这样的行:

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))

想要一个扩展方法,这样我就可以做到

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

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

所以换句话说,这个扩展方法在这个类之外根本没有用。但它会使代码更干净。当然也可以制作常规方法,这就是我最终要做的,因为这是不可能的。

Aaanyways,我只是想知道是否有人有一些很好的论据来解释为什么他们选择对可以创建使用扩展方法的地方施加这样的限制。必须在静态类中是完全有意义的。不能在嵌套的静态类中不会......至少对我来说......

4

3 回答 3

4

如果您拥有该类型的源代码,为什么要使用扩展方法?为什么不让这些扩展方法成为类型本身的成员呢?

扩展方法最好用于扩展您未创建的类型。虽然它们是有用的工具,但它们是间接层,应该是最后的手段,而不是第一个手段。虽然您可以使用它们来扩展您自己的类型,但将它们用于您未创建的类型更有意义。

于 2009-04-21T12:51:04.083 回答
2

如果您要扩展类型,那么扩展方法应该与类型本身一样可访问。

最佳实践还建议将所有扩展方法放在一个地方,最好放在一个静态类中或包含在单个命名空间中。

于 2009-04-21T12:43:07.037 回答
1

使用扩展方法真的会让你的代码比在你的类上使用标准的帮助方法更干净吗?

// 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))
于 2009-04-21T14:03:22.070 回答