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

本文关键字:不起作用 层次结构 命名空间 类库 | 更新日期: 2023-09-27 18:25:41

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

namespace Parent
{
    namespace Child
    {
        Class ChildClass {  }
    }
    Class ParentClass {  }
}

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

要访问ChildClass,必须访问using Parent.Child。但仅通过CCD_ 4就可以访问CCD_。

我可以做到这一点,而无需编译类库,而是将cs文件添加到项目中。但是,当我编译为DLL并将其作为引用添加到项目中时,我无法访问子名称空间。

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

有没有办法在C#中实现这一点?

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

我认为您的类缺少public;以下代码适用于我。

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

我可以创造;

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

这是你期望的工作原理。

EDIT:每个类方法的单独cs文件;

ParentClass.cs

namespace Parent
{
    public class ParentClass{ }
}

ChildClass.cs

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

这似乎对我有效。

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

阅读以下内容:亲子类关系设计模式

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

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