Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: C# вопрос  (Прочитано 9044 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SeRzzz
Гость
« : 20-05-2005 08:07 » 

Можно ли как-то в C#, как бы это сказать, ну "подождать"чтоли пока переменной присвоится ссылка на объект, а потом уже выполнять следующий код.

так как у меня есть, что-то типа того:

MyObject mo=OtherObject.GetMyObject();
if (mo==null)
    throw new Exception("Не заданна ссылка на обьект!");

И я сто процентов знаю, что OtherObject.GetMyObject() не возвращает null. А исключение время от времени вызывается. Всё это дело весит на кнопке, при нажатии на кнопарь оно не понятно в каких случаях вылетает, при повторном нажатии с теми же параметрами НИЧЕГО не изменя тутже - всё работает. Есть подозрение, что ссылка не успевает присвоиться.
Записан
xelos
Гость
« Ответ #1 : 20-05-2005 11:46 » 

не понятно, что означает "подождать"... после выполнения команды MyObject mo=OtherObject.GetMyObject();
mo либо не null (если нет противоречий в присваивании и операция корректна с точки зрения безопасности), либо null - если такое может быть... "присваивание"  происходит "мгновенно".

ошибка, вряд ли идет от того, что ссылка присваивается "с паузой", имхо GetMyObject() надо смотреть... или OtherObject в другом потоке выполняется?

OtherObject - объект какого типа? тоже MyObject?

как создаешь OtherObject?
Записан
SeRzzz
Гость
« Ответ #2 : 22-05-2005 04:36 » 

всё выполняется в одном потоке

а косяк оказался с серваком, всем спасибо. Хз чё там было, но после того как админ там что-то поправил всё стало работать замечательно.
Записан
Misteras2003
Гость
« Ответ #3 : 24-05-2006 15:33 » 

 Не понял Не понял :confused:дана программа:

namespace Peregon8v2
{
    class Program
    {
   static void qwe( int i, string b )
   {
       i = 10;
       b = "www";
   }
   
        static void Main(string[] args)
        {
       int i = 5;
       string b = "qqq";
       qwe( i, b );
       Console.WriteLine( "{0}, {1}", i, b );
   }

При ее выполнении действия в процедуре "qwe" не сохраняются,
выдается ответ "5, qqq", а надо, чтобы значения переменных "i и b" изменились,
и ответ был бы "10, www".
Заранее спасибо!  Улыбаюсь Улыбаюсь Улыбаюсь
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 24-05-2006 17:14 » 

В данном случае сделать параметры возвращаемыми
Код:
static void qwe(out int i, out string b)
{
   i = 10;
   b = "www";
}
Но общая структура программы показывает, что ты неудачно выбрал пример. Судя по коду тебе нужно загрузить значения в функцию qwe и там их изменить. В этом случае надо использовать квалификаторы ссылок:
Код:
static void qwe(ref int i, string b)
{
   ...
}
Строка является объектом, поэтому квалификатора не требует. НО! Так как обработка строк происходит через их копирование, то кроме как через out параметр или возвращаемое значение функции строчку назад не вернуть. Хотя точно не уверен - попробуй ref, может пойдёт.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 24-05-2006 19:32 » new

Да, по ref строчки передаются по ссылке корректно, т.е. изменения будут видны в вызывающей функции.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines