2015-12-04 2 views
1

J'essaie d'obtenir la hiérarchie d'espace de noms utilisée dans C# dans ma bibliothèque de classes. Voici ce que j'essaie de faire:La hiérarchie de l'espace de nom de la bibliothèque de classes ne fonctionne pas

namespace Parent 
{ 
    namespace Child 
    { 
     Class ChildClass { } 
    } 

    Class ParentClass { } 
} 

Après avoir compilé la bibliothèque de classes Cela n'a pas fonctionné comme prévu. Voici mon principe de fonctionnement attendu. Pour accéder à ChildClass, il faut using Parent.Child. Mais on peut accéder à ParentClass juste par using Parent.

Je peux le faire sans compiler la bibliothèque de classes mais en ajoutant le fichier cs au projet. Mais lorsque je compile en tant que DLL et l'ajoute en tant que référence dans un projet, je ne peux pas accéder aux sous-espaces de noms.

MISE À JOUR: J'ai des fichiers différents pour chaque classe. Lorsque j'écris tous les espaces de noms et les classes dans un fichier, cela semble fonctionner. Mais pourquoi?

Y a-t-il un moyen de réaliser cela en C#?

Répondre

0

Je pense que vos classes manquent public; Le code suivant fonctionne pour moi.

namespace Parent 
{ 
    namespace Child 
    { 
     public class ChildClass { } 
    } 
    public class ParentClass 
    { 
    } 
} 

Je peux créer;

Parent.ParentClass p; 
Parent.Child.ChildClass c; 

Quel est votre principe de fonctionnement prévu.

EDIT: fichier cs séparé pour chaque approche de classe;

ParentClass.cs

namespace Parent 
{ 
    public class ParentClass{ } 
} 

ChildClass.cs

namespace Parent 
{ 
    namespace Child 
    { 
     public class ChildClass { } 
    } 
} 

Cela semble fonctionner pour moi.

+0

Avez-vous essayé cette après avoir compilé la bibliothèque de classes? –

+0

@XbyteFinance Oui – Irshad

+0

J'ai plusieurs fichiers. Cela semble être le problème. Pouvez-vous expliquer pourquoi? –

0

Vous imbriquez des classes et des espaces de noms et tout cela semble un peu confus. Pourquoi ne gardez-vous pas une structure d'espace de noms plus plate et faites-vous l'imbrication dans vos classes. Gardez à l'esprit que vous n'avez pas besoin d'imbriquer des espaces de noms ou des classes pour maintenir une relation parent-enfant.

avoir une lecture de ce qui suit: Parent child class relationship design pattern

Cela devrait vous aider à démarrer dans la bonne direction:

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace ConsoleApplication2 
{ 
    using System; 
    using System.Collections.Generic; 

    public class ChildClass 
    { 
     private ParentClass parent; 

     public ChildClass(ParentClass parentIn) 
     { 
      parent = parentIn; 
     } 

     public ParentClass Parent 
     { 
      get { return parent; } 
     } 
    } 

    public class ParentClass 
    { 
     private List<ChildClass> children; 

     public ParentClass() 
     { 
      children = new List<ChildClass>(); 
     } 

     public ChildClass AddChild() 
     { 
      var newChild = new ChildClass(this); 
      children.Add(newChild); 
      return newChild; 
     } 
    } 


    public class Program 
    { 
     public static void Main() 
     { 
      Console.WriteLine("Hello World"); 

      var p = new ParentClass(); 
      var firstChild = p.AddChild(); 
      var anotherChild = p.AddChild(); 
      var firstChildParent = firstChild.Parent; 
      var anotherChildParent = anotherChild.Parent; 
     } 
    } 
}