2012-04-02 29 views
0

我有一个类库项目,和我的名字空间/主类看起来是这样的:将类文件划分为部分类会影响作用域?

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

我一直相信局部类是句法糖和他们在汇编之前合并成一个类。我重复了每个部分类声明的接口,不确定这可能是一个因素。

为什么现在这会超出范围?

回答

0

如果我理解你的代码correctrly创建新DocumentActionReplaceByTag行必须像:

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

又是怎么回事IDisposable的,它只能在一个局部文件中指定。

Glinkot,从提供的代码我看到您的DocumentActionReplaceByTag类放入Document类。如下因素示例显示了嵌套类总是通过ParentClass.NestedClass accessable(请注意,我所有的类都在同一个文件和代码不编译)

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

如果你有另一种情况,那么请提供更多的细节。

+0

谢谢Andris。这是正确的,添加明确的引用做这项工作,但我想继续访问没有前缀的DocumentActionReplaceByTag。这是它在将课程分开之前的工作原理。我确实从其他文件中删除了IDisposable,但这仍然没有任何区别。我不能添加“使用HtmlEngin.Document”,因为这不是一个命名空间 - 我的问题是为什么它的行为不同(有希望,我能做些什么来解决它)。 Thx – Glinkot 2012-04-02 08:11:51

+0

我使用嵌套类添加示例。如果您觉得我不了解您的情况,请提供更多详情。 – Andris 2012-04-03 05:53:22

+0

嗨安德里斯。在这种情况下(请参阅原始问题中的desc)我使用来自不同程序集/名称空间的类。嵌套类可以在没有限定的情况下实例化,当类在单个文件中时,但是当我将它分成部分类时,这不再起作用!根据该人在我的问题链接中的描述。我不明白为什么我需要使用父类来限定每个元素。我只需要重新组合类,如果它归结为,并使用区域。无论如何,这可能会更好,但我仍然想知道为什么范围发生变化。 – Glinkot 2012-04-03 08:51:50