Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция внутри scope другой функции 
:(
    Опции темы
Kronos
Дата 25.6.2005, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 14.9.2002
Где: Млечный Путь

Репутация: нет
Всего: нет



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

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


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

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

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

Это сообщение отредактировал(а) Kronos - 25.6.2005, 15:03
PM MAIL   Вверх
mr.DUDA
Дата 25.6.2005, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



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


--------------------
user posted image
PM MAIL WWW   Вверх
alir
Дата 25.6.2005, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



Цитата
и будут для них засорять пространство имен.

Что ты имел ввиду под этой фразой?
PM MAIL ICQ   Вверх
Kronos
Дата 25.6.2005, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 14.9.2002
Где: Млечный Путь

Репутация: нет
Всего: нет



Цитата(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. Других способов вроде не существует.


Вероятно других способов действительно нет, а жаль. Часто большие функции режешь на куски из удобства. Больше нигде эти функции части не будут нужны а область видимости внутри класса (или пространство имен класса, как правильней?) засоряется лишними функциями. При чтении чужих программ это также не доставит удовольствия.
PM MAIL   Вверх
alir
Дата 26.6.2005, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 19.3.2005

Репутация: 2
Всего: 4



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

Понятна суть вопроса, но неужели это так важно? Есть ли реальная задача, требующая решения данного вопроса? Если уж захотел, то, действительно, кроме того, что сказал
mr.DUDA вряд ли что-нибудь еще можно предложить.
PM MAIL ICQ   Вверх
Kronos
Дата 26.6.2005, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 14.9.2002
Где: Млечный Путь

Репутация: нет
Всего: нет



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


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

Я бы сказал даже гораздо удобнее. У меня часто получается, что на одну функцию приходится десяток вспомогательных. Нигде более эти функции не используются а без них текст основной функции станет нечитабельным. Все эти функции выносятся в scope класса. Не самый лучший вариант.
PM MAIL   Вверх
mr.DUDA
Дата 26.6.2005, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



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

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


--------------------
user posted image
PM MAIL WWW   Вверх
Kronos
Дата 26.6.2005, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 14.9.2002
Где: Млечный Путь

Репутация: нет
Всего: нет



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


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

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

Это сообщение отредактировал(а) Kronos - 26.6.2005, 12:57
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0715 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.