Lasciami rispondere alla domanda effettiva che è:
When it isn't right to add types to a well known namespace?
La domanda dovrebbe piuttosto essere la seguente: quando è giusto farlo perché di solito non è mai giusto aggiungere qualcosa per conoscere gli spazi dei nomi. Lo fai solo quando vuoi utilizzare un meccanismo molto specifico.
Con questo cambiamento in mente ...
Vuoi farlo quando vuoi che il compilatore scelga l'estensione anziché quella fornita dal framework.
Esempio
Potresti voler utilizzare l'estensione ToList
migliorata che ha esattamente la stessa firma di quella in System.Linq
spazio dei nomi. Quindi la prima cosa che devi fare è creare questo:
namespace Company.Linq
{
public static class MyCustomExtensions
{
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source)
{
...
}
}
}
Ma è molto probabile che il compilatore rifiuterà di costruire il tuo progetto ora perché non è sicuro di quale ToList
debba usare.
The call is ambiguous between the following methods or properties: 'System.Linq.Enumerable.ToList(System.Collections.Generic.IEnumerable)' and 'Company.Linq.Custom.ext.ToList(System.Collections.Generic.IEnumerable)'
Questo significa che non puoi usare System.Linq
e Company.Linq
(o qualsiasi altro spazio dei nomi che contiene questa estensione) allo stesso tempo. Questo potrebbe essere un grosso problema in caso di Linq.
Puoi risolverlo inserendo le estensioni in un namesapce più specifico, quindi System.Linq
, ad esempio System.Linq.Custom
.
Ora il compilatore sceglierà la tua estensione su quella predefinita perché il tuo spazio dei nomi è più specifico.
When there are many of them, it starts to get confusing between what are 'official' types and 'in-house' types.
No, non lo farò, come ho detto. Non potrai creare il tuo progetto se importa estensioni con le stesse firme da due due diversi spazi dei nomi.
Devi decidere se le tue estensioni dovrebbero sostituire quelle originali o devi usare una firma diversa. Othewirse ci saranno conflitti.