类库命名空间层次结构不起作用

时间:2015-12-04 09:57:12

标签: c# dll namespaces class-library

我正在尝试在我的类库中实现C#中使用的命名空间层次结构。这是我想要做的:

namespace Parent
{
    namespace Child
    {
        Class ChildClass {  }
    }

    Class ParentClass {  }
}

编译类库后,它没有按预期工作。这是我的预期工作原则。

要访问ChildClass,必须using Parent.Child。但只能通过ParentClass访问using Parent

我可以在不编译类库的情况下执行此操作,但将cs文件添加到项目中。但是当我编译为DLL并将其作为项目中的引用添加时,我无法访问子命名空间。

更新:我为每个班级都有不同的文件。当我将所有名称空间和类写入一个文件时,它似乎工作。但为什么呢?

有没有在C#中实现这个目标?

2 个答案:

答案 0 :(得分:0)

我认为你的班级遗失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 { }
    }
}

这似乎对我有用。

答案 1 :(得分:0)

您正在嵌套类和命名空间,这一切似乎有点困惑。为什么不保持更平坦的命名空间结构并在类中进行嵌套。请记住,您不需要嵌套名称空间或类来维护父子关系。

阅读以下内容:Parent child class relationship design pattern

这应该让你开始朝着正确的方向前进:

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;
        }
    }
}