将类文件划分为分部类会影响作用域

本文关键字:影响 作用域 文件 划分 | 更新日期: 2023-09-27 18:29:53

我有一个类库项目,我的namespace/main类如下所示:

文件:Document.cs

     namespace HtmlEngine 
     {
         public class Document : IDisposable
         { ...
               public class DocumentActionReplaceByTag : IDocumentAction
               {

所有这些都很好,在我提出的另一个项目/组装中:

using HtmlEngine;
...
DocumentActionReplaceByTag currentDocAction = new HtmlEngine.DocumentActionReplaceByTag("[NEXT_PART]");

而且效果非常好。但是,我现在已经将该Document类文件划分为几个文件,称为DocumentActions.cs和DocumentSections.cs,并将主要功能保留在Document.cs文件中。在每一个上面,我都放了:

public partial class Document : IDisposable
{

现在,在使用项目中,我收到一个"无法解析符号"DocumentActionReplaceByTag"错误。我仍然使用HtmlEngine。

我能在网上找到的最接近的东西是这篇类似描述我困境的帖子,但他不太清楚发生这种情况的原因:http://www.daniweb.com/software-development/csharp/threads/140673/understanding-partial-classes

我一直认为分部类是语法糖,在编译之前它们被组合成一个单独的类。我为每个分部类声明重复了接口,不确定这是否是一个因素。

为什么现在会超出范围?

将类文件划分为分部类会影响作用域

如果我正确理解了您的代码,那么创建新DocumentActionReplaceByTag的行必须看起来像:

DocumentActionReplaceByTag currentDocAction = new HtmlEngine.Document.DocumentActionReplaceByTag("[NEXT_PART]");

至于IDisposable,它必须只在一个部分文件中指定。

Glinkot,从提供的代码中,我看到您的DocumentActionReplaceByTag类被放入Document类中。下面的示例显示嵌套类总是可以通过ParentClass.NestedClass访问(注意,我的所有类都在同一个文件中,代码不编译)

    namespace SomeNamespace
{
    public class ParentClass
    {
        public class NestedClass { }
                public void SomeMethod()
                {
                    // This compiles, since nested class is used inside parent class
                    NestedClass nestedClass = new NestedClass();
                }
    }
    public class AnotherClass
    {
        public AnotherClass()
        {
            // Not compiles since "NestedClass" is defined as nested class
            var nestedClass = new NestedClass();
            // Will compiles
            var nestedClass = new ParentClass.NestedClass();
            // Not compiles since "NestedClass" is defined as nested class
            NestedClass nestedClass = new NestedClass();
            // Will compiles
            ParentClass.NestedClass nestedClass = new ParentClass.NestedClass();
        }
    }
}

如果您有其他情况,请提供更多详细信息。