多くの型パラメータを使用してインスタンス化される危険性のあるジェネリック型を実装する場合、JITパフォーマンス/コードサイズなどの理由で多くのネストされた非ジェネリック型を避ける必要がありますか?ネストされた型はジェネリック型ではいけませんか?
例:
public class MyGenericType<TKey, TValue>
{
private struct IndexThing
{
int row; int col;
}
private struct SomeOtherHelper
{
..
}
private struct Enumerator : IEnumerator<KeyValuePair<TKey, TValue>> { }
}
同様に動作外の非ジェネリック型を持つことですが、その後、彼らは名前空間を汚染代替。 ベストプラクティスはありますか?
public class MyGenericType<TKey, TValue>
{
private struct Enumerator : IEnumerator<KeyValuePair<TKey, TValue>> { }
}
internal struct IndexThingForMyGenericType
{
int row; int col;
}
internal struct SomeOtherHelper
{
...
}
常にボトルネックを起こさずに最適化することはありません。最も理にかなった方法でコードを書いてください。ほとんど問題はありません。質問に関して、私は知っていませんが、BCLで多くのネストされたプライベートクラスを見ることができるので、デザインの観点から、そのルートに行く気はありません。あなたが言う2番目のものは混乱する可能性があります – nawfal
このコードは意味論的に同じではありません。あなたの最初の例では、 'SomeOtherHelper'は一般的なパラメータに依存するため、単一の型ではありません。たとえば、 'typeof(MyGenericType .SomeOtherHelper)'は 'typeof(MyGenericType .SomeOtherHelper)'と同じではありません。 –
Enigmativity
名前空間がクリーンなので、クラスをネームスペースに入れることに問題がある場合は、ネームスペースがMyNamespaceの場合はサブニードスペースに追加し、次にMyNamespace.AccesoryNamespaceに追加する場合はサブネームスペースに追加します。 – Gusman