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

私はいつも部分クラスは、構文上だったと信じています砂糖を入れて、コンパイルする前に単一のクラスにまとめました。部分クラス宣言ごとにインターフェイスを繰り返しましたが、それが要素であるかどうかはわかりません。

なぜこれが範囲外になるのですか? IDisposableをおよそ

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

そして、何、それは唯一つの部分のファイルで指定する必要があります。私はあなたのコードを理解している場合

答えて

0

はcorrectrly新しいDocumentActionReplaceByTagを作成するための行は次のように見なければなりません。

Glinkot、提供されたコードからDocumentActionReplaceByTagクラスがDocumentクラスに追加されています。 folowingサンプルは、別の状況を持っている場合は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(); 
     } 
    } 
} 

は、より多くの詳細を提供してくださいすることを示しています。

+0

ありがとうAndris。それは正しいです、明示的な参照を追加することは仕事ですが、接頭辞なしでDocumentActionReplaceByTagに引き続きアクセスしたいと思います。これは、クラスを分割する前にそれがどのように機能していたかです。私は他のファイルからIDisposableを削除しましたが、それでも違いはありません。私はこれが名前空間ではないので、 "HtmlEngin.Documentを使って"追加することはできません - 私の質問はなぜ違う振る舞いです(そしてうまくいけば、それを解決するために何ができますか)。 Thx – Glinkot

+0

私はネストされたクラスを使用して、例を追加します。私があなたの状況を理解していないと感じる場合は、より詳細をご記入ください。 – Andris

+0

こんにちはアンドリス。この場合(元の質問のdescを参照)、別のアセンブリ/名前空間のクラスを使用しています。ネストされたクラスは、クラスが1つのファイルに含まれている場合には資格なしでインスタンス化できますが、部分クラスに分割するともう機能しません。私の質問のリンクの男の説明に従って。なぜ私は親クラスでそれぞれを修飾する必要があるのか​​理解できません。クラスを再結合する必要がある場合は、そのクラスを再結合し、リージョンを使用する必要があります。とにかくそれはとにかくかもしれませんが、私はまだスコープの変更が起こるのだろうと思っています。 – Glinkot

関連する問題