Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Функция внутри scope другой функции


Автор: Kronos 25.6.2005, 14:30
Такая задача. Скажем у меня есть некоторые функции, которые реализуют либо обращение в какуюто dll (скажем вызов WinAPI), или просто разбивают задачу некоторого большого кода на несколько отдельных частей, для более легкого восприятия.

В любом случае эти функции являются вспомогательными для некоторой главной функции (скажем метод в классе, который является публичным). Эти вспомогательные функции нигде кроме главной функции больше не используются (нигде более не вызываются). Как сделать так, чтобы эти функции были видны только в главной функции. Можно их сделать конечно закрытыми членами класса, но тогда они все равно будут видны для других методов данного класса и будут для них засорять пространство имен. Что делать?


Или подводя итог. Как задать функции, видимые только в local scope другой функции.

Да. Если важно. Это все касательно C#.

Кстати, какие еще солидные (то есть не для зеленых новичков)форумы вы можете порекомендовать. Желательно чтобы там общались программисты направленные одновременно и на .Net и С++ и Windows.

Автор: mr.DUDA 25.6.2005, 15:16
Можно сделать отдельный класс-утилиту, куда помести главную и вспомогательные ф-ции. Главная будет public, остальные - private. Других способов вроде не существует.

Автор: alir 25.6.2005, 16:16
Цитата
и будут для них засорять пространство имен.

Что ты имел ввиду под этой фразой?

Автор: Kronos 25.6.2005, 21:35
Цитата(alir @ 25.6.2005, 13:16)
Цитата
Цитата
и будут для них засорять пространство имен.



Что ты имел ввиду под этой фразой?


Ошибся малость. Засорять локальную (внутреннюю для класса) область видимости для методов класса.

То есть хотелосю бы так. Что нажимаю ctrl+space и появляются в виде подсказки (Visual Studio) возможные функции для вызова. Причем внутри методов класса будут появляться все функции класса, даже закрытые. Хотелось бы, чтобы в одном методе функции были видны таким образом, в другом нет.

Проблему бы решило возможность объявления отдельного namespacе (но вообще меня устроило бы и другое решение, просто поясняю смысл), в который выносятся такие функции, и использование в некоторых методах директивы using. Надеюсь это проясняет логику того, что хотелось бы иметь. Только как я понимаю объявление namespace внутри класса недопустимо. Можно ли как то иначе?

Что то вроде того.

Код


class A
{

namespace tmp
{ private void D()
{......}
}

private void B{
using tmp;
D(); //Все работает
}

private void C()
{D(); //Вот чтобы это не работало
}
}






Добавлено @ 21:38
Цитата(mr @ 25.6.2005, 12:16)
Можно сделать отдельный класс-утилиту, куда помести главную и вспомогательные ф-ции. Главная будет public, остальные - private. Других способов вроде не существует.


Вероятно других способов действительно нет, а жаль. Часто большие функции режешь на куски из удобства. Больше нигде эти функции части не будут нужны а область видимости внутри класса (или пространство имен класса, как правильней?) засоряется лишними функциями. При чтении чужих программ это также не доставит удовольствия.

Автор: alir 26.6.2005, 00:00
Цитата
Проблему бы решило возможность объявления отдельного namespacе. Что то вроде того.
Нет, так точно нельзя.
Цитата
нажимаю ctrl+space и появляются в виде подсказки (Visual Studio) возможные функции для вызова. Причем внутри методов класса будут появляться все функции класса, даже закрытые. Хотелось бы, чтобы в одном методе функции были видны таким образом, в другом нет.

Понятна суть вопроса, но неужели это так важно? Есть ли реальная задача, требующая решения данного вопроса? Если уж захотел, то, действительно, кроме того, что сказал
mr.DUDA вряд ли что-нибудь еще можно предложить.

Автор: Kronos 26.6.2005, 10:39
Цитата(alir @ 25.6.2005, 21:00)
Понятна суть вопроса, но неужели это так важно? Есть ли реальная задача, требующая решения данного вопроса?


Как сказать. онечно это не смертельно. Просто было бы удобнее. Конечно все можно запрограммировать и без этого.

Я бы сказал даже гораздо удобнее. У меня часто получается, что на одну функцию приходится десяток вспомогательных. Нигде более эти функции не используются а без них текст основной функции станет нечитабельным. Все эти функции выносятся в scope класса. Не самый лучший вариант.

Автор: mr.DUDA 26.6.2005, 12:12
Цитата(Kronos @ 26.6.2005, 10:39)
Я бы сказал даже гораздо удобнее. У меня часто получается, что на одну функцию приходится десяток вспомогательных. Нигде более эти функции не используются а без них текст основной функции станет нечитабельным. Все эти функции выносятся в scope класса.

Так может лучше повысить читабельность с пом. #region-ов ?

Автор: Kronos 26.6.2005, 12:51
Цитата(mr @ 26.6.2005, 09:12)
Так может лучше повысить читабельность с пом. #region-ов ?


Да. Спасибо. Относительно хороший вариант.

Правда чужие программы от этого лучше не станут. Присутствие встроенного желаемого мною механизма способствовало бы использованию его сторонними программистами.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)