将类文件划分为部分类会影响范围吗?

时间:2012-04-02 06:41:55

标签: c# scope partial-classes

我有一个类库项目,我的命名空间/主类看起来像这样:

文件: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

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

为什么现在超出范围?

1 个答案:

答案 0 :(得分:0)

如果我理解你的代码,那么创建新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();
        }
    }
}

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