Доступ к объектам из области использования блока через используемый объект - PullRequest
0 голосов
/ 07 марта 2012

Я хотел бы знать, возможно ли сделать следующее:

        using (MyClass o = new MyClass())
        {
            TheClassIWantMyClassToSee x = new TheClassIWantMyClassToSee();
            x.DoStuff();
        }

Я хотел бы создать класс (MyClass) и использовать его в блоке using.Внутри этого блока я хочу работать с объектами определенного типа (TheClassIWantMyClassToSee).Когда использование блока выходит из области видимости, я хочу выполнить определенные действия над этими (TheClassIWantMyClassToSee) объектами.

Можно ли сделать класс осведомленным о других объектах, объявленных в его области действия прозрачно?

Я понимаю, что могу добавить экземпляры объектов к объекту MyClass, но я бы хотел облегчить разработчикам работу с API, который я создаю.

Любые идеи приветствуются.

Спасибо.

Ответы [ 4 ]

1 голос
/ 07 марта 2012

Единственный способ сообщить MyClass о TheClassIWantMyClassToSee - создать ссылку с одного на другое. Нет возможности перемещаться и изучать классы, которые находятся в области видимости. Это утверждение верно независимо от того, относится ли область к используемому блоку, блоку метода, циклу foreach или другому.

Почему бы не иметь простой метод MyClass.AddRelationship(TheClassIWantMyClassToSee child), который бы этот класс знал о другом?

0 голосов
/ 07 марта 2012

Вы можете попытаться использовать MyClass в качестве фабрики для всех "инсайдерских" классов, поэтому у вас всегда будет возможность связать новые экземпляры с экземпляром MyClass.

0 голосов
/ 07 марта 2012

Чем жестче будет напечатан ваш дизайн, тем проще будет использовать API для других. (intellisense) Вы должны добавить его к другому объекту, скорее всего.

0 голосов
/ 07 марта 2012

Что это за "определенные действия"?Если они очищают ресурсы, тогда TheClassIWantMyClassToSee должен также реализовать IDisposable, и вы можете использовать другой оператор using.В противном случае вы могли бы просто использовать блок try / finally:

using (MyClass o = new MyClass())
{
    TheClassIWantMyClassToSee x = new TheClassIWantMyClassToSee();
    try
    {
        x.DoStuff();
    }
    finally
    {
        // Do stuff here
    }
}

Нет способа добавить код в блок finally, который неявно находится в конце оператора using.

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