Разделение файла класса на частичные классы влияет на область видимости? - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть проект библиотеки классов, и мое пространство имен / основной класс выглядит так:

Файл: 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 голосов
/ 02 апреля 2012

Если я правильно понял ваш код, строка для создания нового 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();
        }
    }
}

Если у вас другая ситуация, пожалуйста, предоставьте более подробную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...