Если я реализую общий тип, который может быть подвергнут экземпляру с большим количеством параметров типа, следует ли избегать (по причинам 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, поэтому я бы не пропустил этот маршрут с дизайнерской точки зрения. Второй, как вы говорите, может ввести в заблуждение – nawfal
Этот код не семантически то же самое. В первом примере «SomeOtherHelper» не является одним типом, поскольку он зависит от общих параметров. Например, 'typeof (MyGenericType .SomeOtherHelper)' это не то же самое, что 'typeof (MyGenericType .SomeOtherHelper)'. –
Enigmativity
Если ваша проблема состоит в том, чтобы иметь классы в пространстве имен, потому что вы хотите, чтобы они были более чистыми, добавьте их в пространство под-имен, например, если ваше пространство имен - это MyNamespace, а затем добавьте в MyNamespace.AccesoryNamespace. – Gusman