拡張メソッドは、ネストされた静的なクラスで許可されていませんか?

StackOverflow https://stackoverflow.com/questions/772351

質問

これはなぜでしょうか?私はそれ本当にの素敵なだけで私のクラスの1つに使用されるようにロックダウンされ、いくつかの拡張メソッドを持つことができるように見つけるだろう。本当にどこでも利用できる特定の拡張メソッドを持つようにしたい...と彼らは通常の静的メソッドよりもはるかに良く見ていない: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、私は誰もが、彼らが拡張メソッドを使用し作成することができます場所によって、このような制限を置くことを選択した理由にはいくつかの良いの引数を持っていたかどうかを知るためにだけ興味がありました。 の合計理にかなって静的クラスである必要があります。 は、ネストされた静的なクラスにすることはできません。のない...私には、少なくとも...

役に立ちましたか?

解決

本当にのロットクリーナーのあなたのクラスでの標準的なヘルパーメソッドを使用するよりも、あなたのコードを作成する拡張メソッドを使用しますか?

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

他のヒント

あなたがタイプのソースコードを所有している場合は、

、なぜあなたは、拡張メソッドを使用していますか?あなただけのタイプ自体のものを拡張メソッドのメンバーをしないのはなぜ?

拡張メソッドは、最高のあなたが作成していないタイプを拡張するために使用されています。彼らは便利なツールですが、彼らは最後の手段ではなく、最初にあるべき間接の層です。あなたがあなた自身の種類を拡張するためにそれらを使用することができますが、それはあなたが作成していないタイプのためのそれらの使用を確保するために、より理にかなっています。

あなたはタイプを拡張している場合は、

、その後、拡張メソッドは、型自体と同じくらいequalyアクセスできる必要があります。

ベスト・プラクティスはまた、好ましくは、1つの静的クラスでは、一箇所にすべての拡張メソッドを置くか、単一の名前空間内に含まれることをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top