2010-10-22 5 views
0

Je lis de cette façon que les programmeurs doivent penser à des noms spéciaux pour leurs classes afin de ne pas entrer en conflit avec un autre lorsque le fichier a été chargé sur le PC des utilisateurs. C'est ce que je ne comprends pas, si la classe était dans e.g. DLL, comment cela pourrait-il entrer en collision avec d'autres classes sur ce PC?Namespaces pour éviter les conflits - exemple?

Même sans les espaces de noms, si j'importe une DLL, je suppose que j'aurais besoin d'appeler la classe à partir de cette DLL, donc je ne pourrais pas rendre le code impossible à compliquer. J'apprécierais vraiment l'explication ici, merci!

Répondre

0

Envisagez s'il n'y a pas d'espaces de noms. Ensuite, vous chargez un type MyClass à partir d'un assembly. Maintenant, si vous chargez un autre type d'un autre assembly et qu'il y a une classe MyClass dedans. Comment chargez-vous le second type? Comment faire dire au compilateur que vous voulez quand vous dites

MyClass o = new MyClass() 

La réponse - vous devez nom namespaces pour identifier la classe, sinon il est ambigu. Donc vous dites pourquoi ne pas limiter l'espace de noms à l'assemblage. C'est bien, mais il semble que c'est une si bonne idée que les concepteurs de la plate-forme ont introduit un concept où n'importe qui peut créer plusieurs espaces de noms au sein d'un assemblage pour permettre aux gens de mieux partitionner leur code. Ensuite, nous demandons pourquoi ne pas autoriser les espaces de noms à traverser les assemblages afin que nous puissions partitionner le code plus facilement.

Vous avez de nombreux usages pour les espaces de noms et c'est au concepteur de l'application de trouver quelque chose qui fonctionne pour vous - même s'il s'agit d'un seul espace de noms.

+0

Eh bien donc je peux un peu écrire mon propre classe aléatoire ou classe de liste dans mon espace de noms et puis je vais avoir besoin de ceux d'origine se qualifier avec des noms complets, non? – CuriousOne

+0

bien sûr. C'est exactement ça! –

+0

Merci, je comprends maintenant – CuriousOne

0

DLL Hell, the Inside Story est un bon résumé des anciens problèmes - C# adressé cet émetteur par conception - donc vous n'avez plus besoin de vous inquiéter.

1

exemple: System.Drawing.Point et System.Windows.Point

Donc, si une des références du programme les deux assemblées, sans les espaces de noms, le compilateur se confondre lorsque vous déclarez Point p; ou Point p = new Point(1,1);, par exemple

+0

Mais si vous utilisez les deux espaces de noms et écrire le point dans votre code, lequel est picekd? Comment il va maintenant – CuriousOne

+0

si vous utilisez les deux espaces de noms, vous devez utiliser des noms complets, c'est-à-dire 'System.Drawing.Point p = System.Drawing.Point (1,1);' –

Questions connexes