Vladimirll
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здравствуйте ! Подскажите пожалуйста, (программа рабочая ) для чего в методе public bool Factorize строки : if (m1 == 1) return false; else return true; Они в методе ничего не делают и их запись выглядит как формальность, но и без них метод не работает ? Никак не могу понять их предназначение . // Листинг 10.11. Асинхронные делегаты Pavlovs_243 using System; using System.Threading; using System.Runtime.Remoting.Messaging; // асинхронный делегат public delegate bool AsyncDelegate( int Num, out int m1, out int m2 ); // класс, выполняющий разложение числа на множители public class Factorizer { public bool Factorize( int Num, out int m1, out int m2 ) { m1 = 1; m2 = Num; for (int i = 2; i < Num; i++) if (Num % i == 0) { m1 = i; m2 = Num / i; break; } if (m1 == 1) return false; else return true; } } // класс, получающий делегата и результаты public class PNum { private int Number; public PNum( int number ) { Number = number; } // [OneWayAttribute()] // метод, получающий результаты // public void Res( IAsyncResult ar ) // { // int m1, m2 ; // получение делегата из AsyncResult // AsyncDelegate ad = (AsyncDelegate)((AsyncResult)ar).AsyncDelegate; // получение результатов выполнения метода Factorize // ad.EndInvoke( out m1, out m2, ar ); // вывод результатов // Console.WriteLine( "Первый способ : множители {0} : {1} {2}", // Number, m1, m2 ); // } } // демонстрационный класс public class Simple { // используется ожидание окончания выполнения public void Num2() { Factorizer f = new Factorizer(); AsyncDelegate ad = new AsyncDelegate( f.Factorize ); int Num = 650, tmp; // 1000589023 // создание экземпляра класса, который будет вызван // после завершения работы метода Factorize PNum n = new PNum( Num ); // задание делегата метода обратного вызова // AsyncCallback callback = new AsyncCallback( n.Res ); // асинхронный вызов метода Factorize IAsyncResult ar = ad.BeginInvoke( Num, out tmp, out tmp, null, null ); // ожидание завершения ar.AsyncWaitHandle.WaitOne( 10000, false ); if ( ar.IsCompleted ) { int m1, m2; // получение результатов выполнения метода Factorize ad.EndInvoke( out m1, out m2, ar ); // вывод результатов Console.WriteLine("Второй способ : множители {0} : {1} {2}", Num, m1, m2); } } public static void Main( ) { Simple s = new Simple(); // s.Num1(); s.Num2(); Console.ReadKey(); } } |