Où ou quand utiliserait-on l'aliasing d'espace de nom comme
using someOtherName = System.Timers.Timer;
Il me semble que cela ne ferait qu'ajouter de la confusion à la compréhension de la langue.
Où ou quand utiliserait-on l'aliasing d'espace de nom comme
using someOtherName = System.Timers.Timer;
Il me semble que cela ne ferait qu'ajouter de la confusion à la compréhension de la langue.
Il s'agit d'un alias de type, et non d'un alias d'espace de nom ; il est utile de désambiguïser - par exemple, contre :
using WinformTimer = System.Windows.Forms.Timer;
using ThreadingTimer = System.Threading.Timer;
(ps : merci pour le choix de Timer
;-p)
Sinon, si vous utilisez les deux System.Windows.Forms.Timer
y System.Timers.Timer
dans le même fichier, vous devrez continuer à donner les noms complets (puisque Timer
pourrait prêter à confusion).
Il joue également un rôle dans extern
alias pour l'utilisation de types avec le même nom de type entièrement qualifié provenant de différents assemblages - rare, mais utile d'être supporté.
En fait, je peux voir une autre utilisation : lorsque vous voulez un accès rapide à un type, mais que vous ne voulez pas utiliser la fonction régulière using
parce que vous ne pouvez pas importer certaines méthodes d'extension conflictuelles... un peu alambiqué, mais... voici un exemple...
namespace RealCode {
//using Foo; // can't use this - it breaks DoSomething
using Handy = Foo.Handy;
using Bar;
static class Program {
static void Main() {
Handy h = new Handy(); // prove available
string test = "abc";
test.DoSomething(); // prove available
}
}
}
namespace Foo {
static class TypeOne {
public static void DoSomething(this string value) { }
}
class Handy {}
}
namespace Bar {
static class TypeTwo {
public static void DoSomething(this string value) { }
}
}
Je l'utilise lorsque j'ai plusieurs espaces de noms avec des sous-espaces de noms et/ou des noms d'objets conflictuels. Vous pourriez simplement faire quelque chose comme [par exemple] :
using src = Namespace1.Subspace.DataAccessObjects;
using dst = Namespace2.Subspace.DataAccessObjects;
...
src.DataObject source = new src.DataObject();
dst.DataObject destination = new dst.DataObject();
Qui, sinon, devrait être écrit :
Namespace1.Subspace.DataAccessObjects.DataObject source =
new Namespace1.Subspace.DataAccessObjects.DataObject();
Namespace2.Subspace.DataAccessObjects.DataObject dstination =
new Namespace2.Subspace.DataAccessObjects.DataObject();
Il permet d'économiser une tonne de frappe et peut être utilisé pour rendre le code beaucoup plus facile à lire.
Outre les exemples mentionnés, les alias de type (plutôt que les alias d'espace de nom) peuvent être pratiques lorsqu'il s'agit de faire référence de manière répétée à des types génériques :
Dictionary<string, SomeClassWithALongName> foo = new Dictionary<string, SomeClassWithALongName>();
private void DoStuff(Dictionary<string, SomeClassWithALongName> dict) {}
Versus :
using FooDict = Dictionary<string, SomeClassWithALongName>;
FooDict foo = new FooDict();
private void DoStuff(FooDict dict) {}
Je l'utilise toujours dans des situations comme celle-ci
using Utility = MyBaseNamespace.MySubNamsepace.Utility;
donde Utility
aurait autrement un contexte différent (comme MyBaseNamespace.MySubNamespace.MySubSubNamespace.Utility
), mais je m'attends/préfère Utility
pour toujours pointer vers cette classe particulière.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
11 votes
Que diriez-vous d'un système étendu
using int = System.Int32
en C# ? C'est utile, n'est-ce pas ? C'est le même usage qui peut être exploité ailleurs.0 votes
@nawfal Je crois que les alias de type ne sont pas exportables. Cela signifie que vous ne pouvez pas définir quelque chose comme
using int = System.Int32
et l'utiliser dans d'autres endroits que le fichier de déclaration. Ainsi, cetteint
aInt32
L'alias peut soit être obtenu par d'autres moyens, soit être une chose spéciale dans le compilateur/exécutant.1 votes
@KFL c'est vrai, mais l'avantage que les deux offrent est de même nature.
1 votes
@nawfal votre argument sur
using int = System.Int32
est à la fois erronée et trompeuse - elle est erronée parce queint
L'alias n'est pas implémenté de la manière que vous avez décrite. C'est trompeur car vous sous-entendez que les alias de type peuvent être utilisés de manière globale, tout comme la manière dont lesint
est utilisé surInt32
.3 votes
@KFL Je n'ai pas voulu dire les deux. J'ai juste dit pourquoi avoir un nom personnalisé pour un type pourrait être utile.