2012-04-02 43 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