2010-12-15 17 views
1

Ich habe ein Projekt mit mehreren Namensräumen und viele Klassen innerhalb einer von ihnen enthalten bekam ->Weird-C# Namespace Ausgabe

Some.Namepsace. (namespace) 
       ExistingClass (class) 
       ExistingClass2 (class) 
       Constants (class) 
         .Enum (enum) 

Im Rahmen dieses Projektes ich eine Klasse erstellt, aber mit einer falschen Namensraum wie so

namespace Some.Namespace.Some.Namespace 
{ 
    public class NewClass {} 
} 

Jetzt Some.Namespace.ExistingClass kann einen Verweis auf Some.Namespace.Constants.Enum nicht lösen - es erscheint für Some.Namespace.Some.Namespace.Constants.Enum suchen werden.

Irgendeine Idee warum? NewClass verweist nicht auf irgendetwas und wird von nichts referenziert, daher kann ich nicht sehen, wie sich der Namespace auf andere Komponenten auswirkt. Ich habe das Namespace-Problem auf NewClass behoben, und das behebt es.

+0

Sie sagen, dass es jetzt funktioniert und Sie wollten nur wissen, warum es passiert ist oder es immer noch nicht mit dem festen Namespace funktioniert? –

+0

Works jetzt, wollte nur wissen, warum – Dlongnecker

+0

Ich habe große Schwierigkeiten, Ihre beschreibenden Essay über die Beziehungen zwischen allen Arten und Namespaces zu verstehen. Wie wäre es, wenn Sie uns nur eine kleine Wiederholung des Problems geben? Wie sieht der Code aus? –

Antwort

0

Dies muss etwas mit der Art zu tun haben, wie C# in Visual Studio/CSC versucht, Referenzen aufzulösen. Es scheint, es geht ungefähr so:

  • Blick in Bezug auf den Namensraum des anrufenden Objekt
  • Wenn ein solcher Namespace nicht gefunden wird, versucht, den Verweis auf aussehen, als wäre es absolut ist

In meinem Fall, bevor ich Some.Namespace.Some.Namespace.NewClass hinzugefügt habe, als VS versuchte, die Referenz von Some.Namespace.ExistingClass zu Some.Namespace.Constants.Enum aufzulösen, versuchte es zuerst einen relativen Namespace-Lookup (beginnend mit ExistingClasses Some.Namespace), fand keinen solchen Namespace. Es versuchte dann eine absolute Suche und fand es.

Nachdem ich Some.Namespace.Some.Namespace.NewClass hinzugefügt hatte, fand es den Namespace, bemerkte, dass das Objekt nicht da war, und beschloss, die Suche zu unterbrechen.

5

Eine Klasse innerhalb Some.Namespace.Some.Namespace werden versuchen Some.Namespace.Constants.Enum wie zu beheben: Some.Namespace.Some.Namespace.Constants.Enum, nicht Einige. Namespace.Constants.Enum.

Es würde funktionieren, wenn Sie versuchen würden, auf die Enum zu verweisen als: global :: Some.Namespace.Constants.Enum.

+0

nette klare Antwort, die meine ursprünglich verwirrte Frage nicht beantwortet. Ich habe meine Frage geklärt. – Dlongnecker