Se si implementa un tipo generico che rischia di essere istanziato con un sacco di parametri di tipo, dovrei evitare (per motivi JIT di prestazioni/codice, ecc.) Avere molti tipi non generici nidificati?Devo evitare i tipi annidati nei tipi generici?
Esempio:
public class MyGenericType<TKey, TValue>
{
private struct IndexThing
{
int row; int col;
}
private struct SomeOtherHelper
{
..
}
private struct Enumerator : IEnumerator<KeyValuePair<TKey, TValue>> { }
}
L'alternativa che funziona ugualmente bene è avere i tipi non generici fuori, ma poi inquinano il namespace. Esiste una best practice?
public class MyGenericType<TKey, TValue>
{
private struct Enumerator : IEnumerator<KeyValuePair<TKey, TValue>> { }
}
internal struct IndexThingForMyGenericType
{
int row; int col;
}
internal struct SomeOtherHelper
{
...
}
Come sempre non ottimizzare mai senza mai colmare i colli di bottiglia. Basta codificare in un modo che ha più senso, soprattutto non sarà un problema.Per quanto riguarda la domanda, non lo so, ma puoi vedere un sacco di classi private nidificate in BCL, quindi non mi dispiacerebbe andare su quella strada, dal punto di vista del design. Il secondo, come dici tu, può confondere lo – nawfal
Questo codice non è semanticamente uguale. Nel tuo primo esempio, 'SomeOtherHelper' non è un singolo tipo in quanto dipende dai parametri generici. Ad esempio, 'typeof (MyGenericType .SomeOtherHelper)' non è uguale a 'typeof (MyGenericType .SomeOtherHelper)'. –
Enigmativity
Se il tuo problema è avere le classi nello spazio dei nomi perché vuoi che sia più pulito, quindi aggiungilo a un sottospazio, ad esempio se il tuo spazio dei nomi è MyNamespace poi aggiungi poi a MyNamespace.AccesoryNamespace. – Gusman