Иерархия пространств имен библиотеки классов не работает

Я пытаюсь достичь иерархии пространств имен, используемой в C #, в моей библиотеке классов. Вот что я пытаюсь сделать:

namespace Parent
{
    namespace Child
    {
        Class ChildClass {  }
    }

    Class ParentClass {  }
}

После компиляции библиотеки классов это не сработало, как ожидалось. Вот мой ожидаемый принцип работы.

Чтобы получить доступ к ChildClass, нужно using Parent.Child. Но получить доступ к ParentClass можно только с using Parent.

Я могу сделать это без компиляции библиотеки классов, но добавив в проект файл cs. Но когда я компилирую как DLL и добавляю ее в качестве ссылки в проект, я не могу получить доступ к подпространствам имен.

ОБНОВЛЕНИЕ: у меня разные файлы для каждого класса. Когда я записываю все пространства имен и классы в один файл, кажется, что это работает. Но почему?

Есть ли способ добиться этого на C #?


person Xbyte Finance    schedule 04.12.2015    source источник


Ответы (2)


Я думаю, что вашим классам не хватает public; Для меня работает следующий код.

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

Я могу творить;

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

Каков ваш ожидаемый принцип работы.

РЕДАКТИРОВАТЬ: отдельный файл cs для каждого подхода к классу;

ParentClass.cs

namespace Parent
{
    public class ParentClass{ }
}

ChildClass.cs

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

Мне кажется, это работает.

person Irshad    schedule 04.12.2015
comment
Вы пробовали это после компиляции библиотеки классов? - person Xbyte Finance; 04.12.2015
comment
У меня несколько файлов. Кажется, в этом проблема. Вы можете объяснить почему? - person Xbyte Finance; 04.12.2015
comment
Каждый класс в отдельном файле? - person Irshad; 04.12.2015
comment
Отдельный класс вроде бы тоже хорошо. - person Irshad; 04.12.2015
comment
Вы можете прислать мне свой образец проекта. Почта: [email protected] - person Xbyte Finance; 04.12.2015

Вы вкладываете классы и пространства имен, и все это кажется немного запутанным. Почему бы вам не сохранить более плоскую структуру пространства имен и не сделать вложенность в свои классы. Имейте в виду, что вам не нужно вкладывать пространства имен или классы для поддержания родительско-дочерних отношений.

Прочтите следующее: Шаблон проектирования отношений родительского дочернего класса

Это должно помочь вам начать в правильном направлении:

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;
        }
    }
}
person Murray Foxcroft    schedule 04.12.2015