Это копия, сохраненная 16 июля 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Если не используешь паттерны вроде MVVM, то похуй куда класть. Сделай папку Classes и клади туда. Названия классов с большой буквы в одиночном числе. Папки во множественном.
Спасибо!
Я нихуя не понял. Поиск или просто замена. Объясни что тебе надоо, желательно с примерами.
Для начала получаешь слово из строки. После узнаешь длину слова. Потом меняешь местами первую и последнюю буквы.
Разбиваешь строку на массив символов, создаешь 2 локальные переменные, которым присваиваешь значения первого и последнего элементов массива, склеиваешь массив в строку. Вуаля
char[] chars = str.OrderBy(x => x).Reverse().ToArray();
long number = long.Parse(new string(chars));
Можно сократить линком?
IEnumerable<char> -> char[] -> string -> long
Зависит от объемов твоего финансирования.
В чем принципиальное различие между indexer и dictionary?
Вроде делают одно и тоже, только indexer более гибок.
В книге не очень заморачиваются объяснениями.
Ты какую-то херню спрашиваешь.
indexer - синтаксический сахар для удобной итерации по содержимому объекта.
dictionary - струкстура данных типа ключ-значение.
> Существует ли какое-нибудь соглашение, стандартные названия?
Как на галере взялись называть так и будешь типо GvnHelper, PDRHelper и т. д.
Когда и что лучше использовать. Например для реализации сранног оплейлиста лучше использовать что?
А все вижу на метаинте этот ебанутый набор методов, свойств и интерфейсов на все случаи жизни.
список содержит в себе массив и предоставляет удобные методы и тд для работы с данными внутри
Смотри, во view у тебя например форма, которая связана с презентором, в презенторе ты определяешь основную логику,например пусть там будут евенты от формы и основная логика, а в модели ты уже определяешь реализации конкретные. Например , тебе нужно определить свою логгер который в зависимости от типа сообщения который пользователь выбрал на форме , будет писать сообщение в разные штуки(На консоль,либо файл,можно еще в сеть).
Ты пишешь интерфейс ILogger в модели и пишешь в нем метод Log(string message), в конструкторе презентора принимаешь ILogger, и соединяешь евент формы(клик)с этим методом ILogger.Log. В модели пишешь уже конкретную реализацию интерфейса ILogger, например FileLogger, Console logger. Принцип работы - в конструктор презентора передаешь нужную модель(реализацию) и все. Если у других будет критика к мне , You are welcome. Надеюсь я понятно выразился
Ок, понял. Я почему то подумал что одно это сахарок/обёртка для другого.
В PM сначала включаешь миграции: Enable-Migrations
Потом добавляешь миграцию: Add-Migration
А потом уже обновляешь бд: Update-Database
Вроде как понял, спасибки
перерыл весь гугол, нихуя нормального не нашел (
> нормальные Length prefix для TCP пакетов
просто первым байтом отсылаешь длинну массива. В чем трабла то?
Атрибуты - это мета-данные объекта, они ничего не должны делать.
Тебе теперь нужно объявить класс, который будет через рефлексию читать твой кастомный атрибут из объекта и что-то делать.
Обычно не пишут кастомные атрибуты, так как это сильно бьет по производительности, а используют уже готовые атрибуты и то, если без них нельзя обойтись.
class Card
{
public enum Suit { Spade, Diamond, Club, Hearth }
public Suit Suit;
}
Как принято решать такие конфликты имён?
Твоя мамаша тоже самое спрашивала, когда я ей очко разрывал своим толстенным хуем.
проиграл
Другими именами
А можно просто посмотреть в публичной репе где все нормальные люди ведут разработку.
жаба и с# почти одно и то же, платформы разные, они конкуренты, что тебе больше нравится то и бери, c# быстрее развивается со всякими порой ненужными фичами, java консервативна
Поясняю:
Допустим есть лист hui с содержимым [1,2,3,4,5,6]
Нужно использовать метод, который удалит элемент и вернёт его. Например:
var elem = hui.Yoba(2);
elem == 3 // true
hui == [1,2,4,5,6]
Есть такой метод?
enum задает перечисление , например цвета - синий,красный и тд. Каждому цвета сопоставляется число которое и передается программе когда ты вызываешь Color.RED (например 1), чтобы твоя программа понимала что за цвет ты выбрал,ибо она умеет работать с числами, а названия придуманы для удобства разрабов чтобы они не цифры писали а внятные имена. Словарь является хеш таблицей. При добавлении элемента в словарь(например строки) для нее вычисляется ее хешкод. Этот хеш код сопоставляется с индексом в массиве. И в этот индекс записывается данная строка. Хеш код построен так что для разных строк он генерирует свое число, так что он с высокой долей вероятности гарантирует что у двух разных строк будут разные коды, а соответственно разные индексы в массиве. Словарь дает возможность быстрого поиска,например пользователь вводит строку и тебе нужно узнать,есть ли она в хеш таблице(читай, в твоем массиве) или нет , если бы это был просто массив ,то тебе нужно было бы перебирать все элементы,что довольно долго, а в хеш таблице тебе нужно лишь вычислить хеш код строки которую ввел пользователь, а как мы знаем хешкод соответствует индексу в массиве, то тебе достаточно проверить - пустой этот индекс в массиве или нет. Словарь дает быструю вставку в коллекцию и поиск по ней. Enum предназначен чтобы к примеру ограничить выбор разработчика(к примеру ты определил что в твоей проге поддерживаются только красный и синий цвета, и ты хочешь чтобы другие не могли выбирать розовый,потому что он не поддерживается) таким образом пользователь или другой разработчик сможет использовать только те перечисления которые ты явно объявил.
a() + b() * c()
выражении?
В учебнике пишут, что по спецификации подвыражения вычисляются всегда слева направо (т.е. это будет а, b и с), но тогда нахера нужны приоритеты операций, почему они только на значения распространяются?
Даже если так, то как быть с более сложными выражениями типа a() + b(c())?
Очевидно в случае когда содержание сущности предметной области суть флаг, т.е. может содеражть одновременно множество включенныех признаков-флажков.
компилятор видит операцию и помещают ее в стек последовательно например у тебя есть
Main(){
var L = a() +b(с());
}
Компилятор видит мейн и добавляет его в стек,на вершине стека висит пока что вход в метод мейн,пото создается переменная L, далее он видит a() добавляет сверху мейна метод а() и вычисляет его, потом видит b(), и видит что ему передается c() , теперь на вершине стека висит c(). В итоге видим такую "лестницу" из методов .
c()
b()
результат a
присваивание(=)
main()
Сначала в вершины стека достается c() и выполняется , и убирается из стека, далее выполняется b() и так же удаляется из стека, потом результат a() , далее выполняется операция присваивания , компилятор видит закрытие метода main() и в конце концов из стека удаляется метод main() и теперь он пуст, программа выполнилась
Т.е. автор (Барт де Смет, а не хуй простой) напиздел что вычисление производится слева направло, зачем он это сделал???
Даже по твоему описанию, почему в первом случае сначала будет вычислен a(), ведь компилятор знает при приоритеты, а значит сначала должен вычислить b и с?
так он честно сказал что слева направо если a()+b() то сначала в стек добавляется а и потом b, может он это имел ввиду , а вообще это все описано в CLR via C# рихтера, там небольшая глава этому уделена в самом начале , очень подробно расписано
Нет, там точно вся тройка имеется ввиду. Я тестик написал в консольке, даже скобки добавил:
a() + (b() * c())
и все равно вычисляется в порядке a, b, c
так а какая ему в хуй разница что вычислять первым , он сначала выполнит вызов всех методов по порядку а потом уже отправит результаты в стек для операндов
суть в том что выполнение методов это одно, а выполнение выражения это другое, сначала выполняются все методы по порядку и вернутся результаты их значений , потому что компилятор не может на ходу формировать приоритет операций(+,- и тд) и последовательно их выполнять. Он сначала пробежит по выражению, составит стек вызовов методов по порядку, выполнит его, вернет значения и выполнит выражение подставляя то что вернули методы, при этом будет сформирован свой стек операндов , в котором и будет правильный порядок по приоритету , но вместо методов будут уже подставлены числа которые вернули методы, надеюсь я понятно выразился
Если ты имеешь в виду что метод A() в себе вызывает метод B() а тот в себе C(), то они будут выполняться C() потом B() а потом A()
Имелось ввиду последнее, выходит нет правила вычисления сначала методов слева направа, а все определяет сложность выражения. Мне просто не понятен тогда пиздёж автора.
ну ты же понимаешь что при выражении
a(b(c))) невозможно сначала вычислить a, не имея результата b и с, потому что они передаются в a как аргумент
Ну это первое что пришло на ум, когда я прочитал. Просто автор вроде толковый, я часто сначала списывал некоторые его фразочки как на фигуры речи или неточные, но потом оказывалось что он был абсолютно точен как в учебнике по матану и это я поначалу не уловил до конца суть. Поэтому подумал тут какой-то подвох есть.
возможно лажа с переводом если ты читаешь на русском и он имел ввиду порядок добавления в стек вызова или что то типа этого. Сам я книгу его не читал, так что пояснить не могу.
Прав не до конца. Ломают те программы, которые изначально не пытались защитить. Если взять более менее дорогую софтину, то после декомпиляции можно получить два ведра хуев.
Пиздить все умеют, а попробую что-нибудь из этого на изи крякнуть.
http://updates.buddyauth.com/
"thi" = 011101000110100001101001 (24 бита)
011101 -> 29 -> d
000110 -> 6 -> G
100001 -> 33 -> h
101001 -> 41 -> p
Как теперь вернуть "dGhp" в "thi"? В гугле одни отсылки на MSDN и байтоёбы (мне нужно сделать перебором символов, без >> сдвигов)
У него была претензия конкретно к шарпу. Мол нахуй на нем пистаь, если он легко ломается. Хотя он еще ни одной серьезной программы не ломал.
Сделай программку, которая будет трэкать время. То есть сколько времени потрачено в определенной программе. Если это браузер, то трэкай сайты. Времени даю неделю, можешь начинать.
Спасибо конечно за идею, но я реквестировал немного иное, чтоб делать задачки по мере освоения
>Желательно начиная с массивов
Спасибо!
>>1000714
Оказывается, там сразу после return true; стоял слэш "/", но Xamarin Studio по каким-то причинам его не отображала, но компилятор его видел и падал. Перезапустил студию, слэш стал виден.
Дали людям VS Community edition вместе с VS Code - нет, не хочу. Хочу жрать говно. Зачем вы так?
>VS Community edition
Пока он запускается, можно успеть сходить попить чай, покурить и прочитать все треды на нулевой /pr/.
>VS Code
Он хорош для скриптов, но для компиляции не подходит - ни встроенного дебага, ни компилятора, только консолька и ебись как хочешь.
> Пока он запускается, можно успеть сходить попить чай, покурить и прочитать все треды на нулевой /pr/.
Ну так сходи, попей. Ты ее что, второй раз запускать будешь?
> ни встроенного дебага, ни компилятора
Дебаг - чек. Компилятор - чек.
>Пока он запускается, можно успеть сходить попить чай, покурить и прочитать все треды на нулевой /pr/.
Замерил с таймером - VS 2017 запускается 3 секунды.
Только на топовой пека без решарпера после повторного запуска, когда все закешировалось в оперативке.
в шапке все написано
студия запускается ~8-10 секунд
много чего зависает. правый клик по коду занимает 3-4 секунды, навожу на Add - 6 секунд. даже ctrl-x в первый раз занимает 3 секунды.
WPF ахуенен :))))
вот спеки.
rating = rating.Where( player => player.Value < 20);
Но получаю ошибку:
>Error CS0266: Не удается неявно преобразовать тип "System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, int>>" в "System.Collections.Generic.Dictionary<string, int>". Существует явное преобразование (возможно, пропущено приведение типов).
В чём дело? Значение - число, сравниваю тоже с числом.
Спасибо!
Хедеров не хватает. Глянь в консоли что они посылают за реквесты и сделай так же.
>из этой ссылки извлекается линк на плеер, из линка на плеер извлекается api-call
Поясни, как это происходит.
Вот там раскидано. Если на словах, то подается прямая ссылка на видос, из нее берется ссылка на плеер сайта, из этой ссылк тащится api-call, из api-call тащится юрла на мп4. Я смотрел, какие запросы посылает мозилла и пытался подобные посылать, но ничего не вышло.
Вот автоматная грамматика для парса. На кусок кода где string dick и HttpClient() можете вообще внимания не обращать - я его забыл закомментить
Из сурса страницы с видосом вырвать <meta property="og:video:iframe" content="..." /> и перейти;
Из этого линка вырвать dataUrl:'..' и перейти
Оттуда вырвать http://fs.myvi.ru/... и перейти
Так формится линк на мп4 или флв, в зависимости от того, что там заливали
var max = dict.Values.Max();
var result = dict.Where(pair => pair.Value == max).Select(pair => pair.Key);
Что-то типа такого.
Где main()? Это ведь "точка входа" в программу, как без него?!
Любая программа это по сути просто луп, так? Где тут луп?
Стал гуглить. Оказывается, main() таки есть, но в генерируемом коде. И что теперь делать?
Помогай, анон. Я тупой. Я к такому оказался не готов и теперь не могу понять, как вообще что-то делать.
Не предлагает. Ты её просто ещё не понял. Гугли mvvm применительно к wpf.
Есть 2 варианта: прописать в app.xaml стартовый uri и тогда wpf сам создаст главное окно, которое ты там укажешь, либо удалить это место и прописать в настройках проекта стартовую точку, в которой ты создашь главное окно руками или через ioc-контейнер.
Забей хуй на впф, там костыль на костыле, особенно если начнешь изучать MVVM. Кроме того, эта технология настолько дохлая, что никто не касался ее обновлений уже лет 5. Даже в этом треде тебе прямо говорят - для C# десктопа не существует, шарп нужен только в вебе, а именно ASP.NET, и в геймдеве, а именно Unity. Всё. Если очень хочешь пилить программки для десктопа, то тебе в джаватред.
>прописать в app.xaml стартовый uri и тогда wpf сам создаст главное окно, которое ты там укажешь
То есть как в дефолтном WPF шаблоне?
>удалить это место и прописать в настройках проекта стартовую точку, в которой ты создашь главное окно руками
В сгенерированном коде куча всякой хуйни #препроцессорные директивы и прочее, оно нужно?
Алсо, Арр класс для чего?
>>1001421
Ты сделал меня грустить.
Почему жаву хейтят?
>Почему жаву хейтят?
Не знаю, но я после ебли с впф и мввм попробовал javafx и сделал свой вывод, совсем неприятный для любителей шарпа. Попробуй сам и узнаешь, хуле.
Я не программист так то. Так, совсем чуть-чуть.
Долго выбирал, шарп показался отличным выбором - и под винду, и под андроид, и УНИТИ, и - в будущем - годот.
Охуенно же.
А теперь опять хуй пойми. Мне ведь так, для себя.
>То есть как в дефолтном WPF шаблоне?
Да. В сгенерированный код вообще не лезь, нах он тебе нужен.
https://simpleinjector.readthedocs.io/en/latest/wpfintegration.html
Вот тебе пример, как свою стартовую точку впердолить с использованием ioc-контейнера. Без него все то же самое, только все объекты сам руками создаёшь.
private static string swapBoundarySymbols(string s) {
if (s.Length > 1) {
return s[s.Length - 1] + s.Substring(1, s.Length - 2) + s[0];
}
else {
return s;
}
}
Пытаюсь че то написать на ASP .Net, возникла проблема. Создаю локальную базу данных, создаю таблицу, заполняю, и почему то вместо русских символов в обозревателе таблицы выводит ????????? ???????. Тип полей стоит nvarchar, в чем еще может быть проблема??
>Кроме того, эта технология настолько дохлая, что никто не касался ее обновлений уже лет 5.
Последняя версия - июль 2015
>Если очень хочешь пилить программки для десктопа, то тебе в джаватред
Последняя версия javafx - март 2014
Может, тебе с такими свежими и актуальными знаниями укатиться отсюда, а?
>>1001451
>Почему жаву хейтят?
Из-за умников которые рассказывают про необновляющийся 5 лет впф и свежую javafx на замену
Сорян если не тот тред, просто не знаю куда еще.
Collation должен быть Кирилица CL_AS
Затык идет на стадии объявления модели - пытаюсь объявить её через дженерики, а там в параметр нужно передавать тип. Его можно получить через рефлексию, но как-то это некрасиво, может есть готовый красивый паттерн для таких случаев?
Понял, что тэмплейт ВПФ создаёт сгенерированный Main(), вызывающий унаследованный от System.Windows.Application метод Run(). В Visual Studio через Go to implementation можно посмотреть только комментарии, а хотелось бы понять его реализацию. Можно где-то посмотреть код или хотя бы алгоритм в общих чертах? На msdn тоже ничего не нашёл.
Не понятно следующее. Программа "существует", пока исполняется main(), а тот, в свою очередь, завершается только после выполнения run(). Но программа из тэмплейта может выполняться бесконечно, значит, в run() - или в вызываемых им методах - должен быть какой-то цикл, типа while (true){...}, так?
Куки генерирует сервер и возвращает в заголовке Set-Cookie. Смотри свойство Cookies.
Куки можно сделать и самому, это обычный файл.
Спасибо за наводку
Есть класс, который опрашивает один девайс через каждые 5 секунд используя при этом unmanaged библиотеку, результаты опроса пишет в лог файл. В связи с этим вопрос, как бы мне точно организовать все это дело так, чтобы за эти пять секунд успеть обработать данные с девайса и записать в лог-файл, или хотя бы знать, что я не уложился в этот период (погрешности все дела). Если файл большой, то время записи ведь больше будет? Или библиотека по какой-либо причине долго будет обрабатывать. В какую сторону копать?
что лампового? дауны какие-то сидят. никто ничего не знает, но все кому-то что-то советуют.
Зачем тебе сервер на Windows? В Linux же все работает, и ASP.NET MVC, и Entity Framework, и веб-сервисы.
>мобильник
>В феврале 2016 Microsoft объявила о приобретении компании Xamarin. Вскоре после покупки Microsoft объявила о закрытии разработки моста Android и поддержки данных приложений в Windows 10. Главным направлением компании остался мост iOS.
Что-то не густо. Зачем он нужен без поддержки 80% всех телефонов?
Какие СУБД используются при работе с ASP.NET?
>что лучше почитать общего представления
Виктор Гольцман. MySQL 5.0
http://www.proklondike.com/books/dbmysql/golzman_MySQL_5.0_2010.html
>Какие СУБД используются при работе с ASP.NET?
Любые, имеющие ADO.NET провайдер.
На то, что надо больше делать и меньше говорить. Запили проект, в котором будет авторизация и доска для комментов. Лайт двощ, короче.
На двоще пссскоды это авторизация.
Чакон С. Штрауб Б. Git для профессионального программиста
https://www.htbook.ru/kompjutery_i_seti/programmirovanie/git-dlja-professionalnogo-programmista
Если хочешь графический клиент, то ставь SmartGit, но основные команды для консоли нужно знать.
Заодно посмотри и про Team Foundation Server:
https://msdn.microsoft.com/ru-ru/library/hh529827(v=vs.110).aspx
Это система управления проектами (задачи, багтрекер и т.д.), часто используется при .NET разработке. Раньше там была какая-то своя корявая система контроля версий от Микрософта, теперь перешли на православный git
>А на что стоило бы обратить внимание?
У всех популярных СУБД есть провайдеры.
Из бесплатных лучшая - PostgreSQL, чуть побыстрее, но беднее возможностями - MySQL (удобна для ORM, если не используешь триггеры, хранимые процедуры и т.д., а только CRUD).
Коммерческих основных 3 - MS SQL Server, Oracle Database и IBM DB2. Первая есть только под винду, остальные кроссплатформенны. У всех есть бесплатные урезанные версии (в основном ограничения по размеру базы).
Встраиваемые СУБД - Firebird (Embedded конфигурация) и SQLite, хранят базу в памяти и могут записывать/считывать из файла. Сервера у них нет (точнее, он в виде динамической библиотеки, подключаемой к приложению). Позволяют делать портабельные приложения с базами. SQLite считается более быстрым, но не полностью поддерживает стандарт SQL, не может работать в многопользовательском режиме (когда несколько юзеров подключаются к одной базе одновременно). Для C# к SQLite написан враппер (т.е. работа напрямую без ADO.NET), можно скачать на sqlite.org
Если ты по человечески объяснишь что нужно, то можно будет тебе по человечески ответить. Лучше сразу код покажи.
>Первая есть только под винду
Ну ты и соня, тебя даже вчерашний шторм не разбудил
https://www.microsoft.com/ru-ru/sql-server/sql-server-vnext-including-linux
g:asp net core
Пасибки.
Круто.
А почему работадатели обычно требуют только MsSQL?
Стоит ли на остальные обратить внимание?
SQLite то поприкольней вроде.
ADO это для C/C++ и Delphi, ты про ADO.NET? Это в .NET главный фреймворк для работы с базами + ORM надстройка Entity Framework с LINQ поверх него. В Mono поддерживается.
Портированный с жабы NHibernate тоже использует ADO.NET.
Вообще проблемы с кроссплатформенностью в .NET в основном у десктопного гуя. У нас в конторе клиент для ERP системы из-за этого пишется на Eclipse/SWT (дерьмо полное), т.к. нужна поддержка Linux. Сейчас думаем, переходить ли на Qt или делать веб-интерфейс. А вот серверная часть, со всеми веб-сервисами, демонами и т.д. работает без проблем под любой ОС.
>>1002482
Грубо говоря так:
while (true)
{
var a = CustomClass.ReadStatus();
Thread.Sleep(5000);
}
Суть в том, что мне нужно делать опрос через каждые 5 сек, но ведь поведение метода ReadStatus по времени может быть разным, а это значит, что следующий опрос будет не через 5 сек, а 5 сек + время работы метода. А как мне точно то уложиться в этот период?
На языках со сборкой мусора реалтаймовые приложения писать нельзя, ибо время работы сборщика непредсказуемо.
Для измерения времени в WinAPI есть функция QueryPerformanceCounter, которую можно импортировать в C#:
https://msdn.microsoft.com/ru-ru/library/bb397808(v=vs.90).aspx
> На языках со сборкой мусора реалтаймовые приложения писать нельзя
Чому же. Реалтайм есть разный.
Как можно определить время выполнения операции, если GC может запуститься когда угодно?
А должны ли это быть это ровно 5 секунд по атомным часам? Гугли системы мягкого реального времени
>NET в основном у десктопного гуя
Это WPF этот бесовской?
>или делать веб-интерфейс.
Чому бы и ни.
Можно и на андройде если что запустить.
>Трудно приготовить еду на кривой плите
>Начинаешь готовить на ровной плите
>Называют дебилом
Чёт мда, хех.
Я вообще не тот анон.
С# охуенный язык, наверное лучший из всех. Но вот когда доходит до дестопа, то WPF сосет. Ближайший пример вот >>1002693 и такой хуйни в джаве внезапно нет.
Какой такой хуйни, поехавший? Ты даже его кода не видел, а уже решил что это косяк WPF.
https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.canuseraddrows(v=vs.110).aspx
Если уж на то пошло, то реалтаймовые приложения можно запускать только на реалтаймовых осях... и, внезапно, можно писать на языках с GC - только GC должен поддерживать реалтаймовость (а именно - возможность квантовать время сборки)
Ты чеге думаешь, я совсем дурак что ли?
Разобрался сам, я юзал кастомные шаблоны данных, задал CellTemplate, а CellEditTemplate забыл, так что WPF не знал что ему новую строку вводят, поэтому тупо ее не создавал.
Теперь у меня другя проблема, мой кастомный темплейт один как для показа ячейки, так и для ее редактирования - поэтому одна и та же портянка кода DataTemplate дублируется. Как то можно во дном месте прописать, а потом повтороно использовать?
Более того, в гриде два столбца одного типа, так что этот шаблон 4 раза пришлось скопипастить. Здесь тоже можно что-то сделать?
<Grid>
<Grid.Resources>
<DataTemplate x:Key="YobaTemplate">
....
</DataTemplate>
<DataTemplate x:Key="YobaEditTemplate">
....
</DataTemplate>
</Grid.Resources>
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Allo" CellTemplate="{StaticResource YobaTemplate}" CellEditTemplate="{StaticResource YobaEditTemplate}"/>
<DataGridTemplateColumn Header="EtoTy" CellTemplate="{StaticResource YobaTemplate}" CellEditTemplate="{StaticResource YobaEditTemplate}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
Кхм.. это значит по ты отображаешь одно и то же свойство в обе колонки... а покажи свою верстку/данные/чего хочешь получить
https://github.com/dotnet/csharplang/blob/master/proposals/default-interface-methods.md
Джавапидоры, скажите - вы этим реально пользуетесь? Нахуй это в сишарпе?
Ты прав, за портянками разметки пропустил что внутри шаблона контрол биндится к данным, а там надо имя свойствта цели прописать. Выходит вся идея по обобщению фейл, раз у каждого столбца своё свойство привязки.
А не то шо сука.
У джавапетухов есть аналог Визуал студии?
Как понимаю комунити версия интелджи идеа не поддерживает вебразработку?
Ну и нахуй она нужна тогда, такая ахуенная?
Пиздец это надо уметь перескачить по жлобству майрософт.
Настоящий жабопетух кушает сладкий хлебушек.
Как мне передать в View модель из [HttpGet] метода, ввести свое значение в поле модели и получить её в [HttpPost] методе? Проблема в том, что после отправки формы все поля, кроме введенного в текстбоксе, обнуляются.
Да, я неофит в аспе.
сделай hidden поля со значениями с модели
Html.HiddenFor
но это хуйня, если много полей,
все зависит от задачи
https://github.com/Perekoter/Blackjack
1) Naming things и конвенции
1.1) Зачем нужна папка Classes? Почему структура директорий не соответствует структуре неймспейсов?
1.2) Почему названия методов у тебя идут с маленькой буквы? Конвенция в C# - названия методов начинаются с заглавной буквы
1.3) Намешанные в одном месте табы и пробелы - расстел в любом приличном обществе
2) Структура программы
2.1) Почему почти вся логика программы находится в Program.cs? Погугли SRP.
2.2) Метод Start занимает овер 100 строчек, его нужно разбить на подметоды.
2.3) В коде тут и там мелькает if (player.User). Означает что кто-то обосрался с абстракциями
2.4) Опять насчет абстракций: class Player выглядит так, как будто он должен имплементировать интерфейс IPlayer и иметь две реализации: HumanPlayer и AiPlayer
3) Code style
3.1) В программе понамешен Linq и императивный for. Linq - хорошая идея. Императивный for ведет к багам.
3.2) Сложение строк - плохая идея. Почитай про интерполируемые строки и string.Format()
3.4) Магические цифры в коде (например, 21) должны быть константами. В противном случае заебешься менять это магическое значение.
Баги было лень искать, и так проблем хватает.
Спасибо! Буду фиксить.
> приложение с кокошечками для управления настройками безопасности и конфиденциальности Internet Explorer
gpedit.msc
Проект компилится и бинарники заливаешь на веб-сервер
Если строка равняется "Ывфывфывфыв+++" - удаляется 3 плюса с конца. Как это сделать?
У меня есть такая хуйня, но она не работает.
while (finalText[finalText.Length - 1]=='+') {
finalText.Substring(0, finalText.Length - 1);
}
> Для кого эта книга?
Что за книга-то?
> В ангельский могу, но уходит дополнительный труд на понимание текста
Моги лучше.
Строки иммутабельны, балда. Substring, Add и прочее возвращают новую строку.
public static string RemovePlusesAtTheEnd(string s)
{
if (string.IsNullOrEmpty(s))
{
return string.Empty;
}
var first = s.Length - 1;
while (first >= 0 && s[first] == '+')
{
--first;
}
return s.Substring(0, first + 1);
}
Обложку я прочитал, но с текта орнул. Неплохо знал плюсы и алгоритмы несколько лет назад, сейчас мало что помню, надеюсь в процессе вспомнить.
Имеет ли смысл uwp упарывать? Или всем плевать на чем ты формочки клепаешь?
Воистину, что-то я совсем ебанулся.
Формочки на UWP можно запускать на всех виндах, виндоус фонах, сёрфесе и хуящике-один. Маколинукса в планах пока нету, но уже в плане поддерживаемых платформ лучше, чем другие технологии от МС
Если пилишь что-то для своих нужд и у тебя 10 винда или хочешь что-то изучить с заделом на отдаленное будущее, то имеет.
>>1003840
>Формочки на UWP можно запускать на всех виндах
Только на 10.
.InitialDirectory
Я тут на днях увидел котлин в действии и охуел какой он пиздатый, джетбрейнс любят шарп, но ебучей джавапараши слезть не могут, поэтому вдохновились шарпом и сделали пиздатейший язык.
Решил по старой памяти на ведро написать что-нибудь и просто охуел. Не от охуенности языка, а от того, как ебучая параша jvm не дает этому пиздатому языку простора - везде тебе встречается ебаная хуйня, например, хуевейшие дженерики.
ПОсле этого я гораздо сильнее стал понимать, что шарп - самый ахуенный язык. Правда в последнее время развитие медленное стало, но все равно.
Да просто не так много чисто языковых фич, которые нужны прямо вот вообще срочно и которых в шарпах до сих пор нет. А в том, что касается окружения, MS ебашит вовсю: открытие исходников, roslyn, .net core, asp.net core, ef core, uwp, .net standard, поддержка линупса, полная переработка портала с документацией.
Ебать ты тупой, какой тебе код. Твой вопрос решается за 2 секунды в гугле.
>Наблюдатель
> Но к сожалению ни там, ни там пункта Windows Store.
Вероятно при установки Visual Studio не все галочки были поставлены а значит и
нет нужных templat'ов.
1. Найди в списке установленных программ Microsoft Visula Studio, выбери её и нажми "Изменить"
2. Проверь выбраны ли соответствующие компоненты Windows Store App SDK или как-то так.
Если они не выбраны то выбери их и все автоматом установятся. Название компонента я
возможно не точно написал, сейчас нет возможности глянуть, только вечером.
Add:
Windows Store App уже устарели. Теперь это Windows Universal App ну
и template теперь назвывается Visual C#->Windows->Universal->Blank App (C#)
это про 2015ю студию.
Не благодари, но код бросай.
Все, разобрался, как всегда хуй с синтаксисом, я доверился интелисенсе и она возвращала бул, а нужно было валидейшонресалт.
Книга устарела и store app уже всьо. Там выкладывали первую главу бля ювп отдельно, но она на инглише только.
для меня киллер-фичи котлина это сахарок в виде дата классов и обилия конвеншенов, это избавляет от тонн кода для поддержки dto, плюс ебля за null'ы. С этим шарп бы стал языком богов, а не языком царей.
Поддвачну адеквату
Вообще по поводу отсутствия развития языковых фич я погорячился. В 7.0 довольно много масштабных изменений.
base64
Ага, есть внутри такой цикл, принимает сообщения от винды всякие типа выключения, событий клавы и мыши, таймеры - если есть обработчик - передается управление ему. Например жамкнул ты клавишу Х, процессу пришло сообщение WM_KEYDOWN, обработчик внутри Application нашел активное окно и передал ему Key_Down, в окне нашелся активный фокус клавиатуры в текстбоксе - событие ушло ему, текстбокс вызвал функцию, которая перевела код клавиши и состояние клавиатуры в букву Х, поменял Text а потом дернул твой обработчик TextBox1_OnKeyDown. Как только обработка закончилась - происходит обработка следующего события, либо поток засыпает до следующего события. Поэтому если ты что-то тяжеловесное нафигачишь в обработчике - приложение визуально "повиснет"
Convert.ToBase64String, Convert.FromBase64String из коробки (можно кнешно нагуглить еще реализации base16,base32, ascii85, но стандартно - base64)
Про использование кодировок забудь, они для только string->byte[]->string, не наоборот, потому что в любой кодировке есть наборы байт, которые символам не соответсвуют
Ну и где эти галочки ставить? Что-то не вижу. Можешь пальцем ткнуть?
public partial class WorkerForm : Form
{
public bool FirstSecond;
public WorkerForm(string WorkNameData1, string WorkNameData2, bool FirstSecond)
{
InitializeComponent();
if (FirstSecond)
{
WorkerNameSurnameLabel.Text = WorkNameData1;
OnStandByTaskTextBox.Text = Convert.ToString(Worker.ActiveTaskCounter);
FinishedTaskTextBox.Text = Convert.ToString(Worker.FinishedTaskCounter);
}
else
{
WorkerNameSurnameLabel.Text = WorkNameData2;
OnStandByTaskTextBox.Text = Convert.ToString(Worker.ActiveTaskCounter2);
FinishedTaskTextBox.Text = Convert.ToString(Worker.FinishedTaskCounter2);
}
}
Дальше бы писали на pl/sql, пока ibm или кто-нибудь не решил бы поднять бабла.
Вот код для примера:
Console.WriteLine((double)s / k)
стандарт стандартом, а хули они свое то не используют?
Я не хочу йобу выкатывать, я просто на крестах последние 3 месяца писал, а тут работу нашёл на сисярпе, вот сейчас за неделю хочу навыки освежить, потому и решил написать клиент серверный чат, но до этого, в общем то, никогда ни с чем кроме именованных труб не работал, а Socket/TCP вроде очень старые ребята, и я хотел узнать, не потеряли ли они свою актуальность. Хотя про mesh сети посмотрю, если ты конечно не тралишь.
Или типа того.
В Шарпе есть что то подобное?
var control = new MyControl();
control.SomeEvent += SomeHandler;
form.Controls.Add(control);
//потом мне нужно его убрать
form.Controls.Remove(control);
Ворос, ГЦ же вычистит контрол, если я не отпишусь от события? Нужно ли диспозить контрол, если я не добавлял работу с неуправляемыми ресурсами?
Да, в шарпе тоже такое практикуется.
Компилятор ругаться не будет, но на код ревью в нормальной компании заставят переделывать.
Контрол - IDisposable. Внутри у него есть анменеджед ресурсы по умолчанию, даже если ты не писал их. Контрол диспоузить надо.
Control будет держать form живой, если не отписаться от эвента. Устраивает такое - не отписывайся. Однако, если нужно четко контролировать время жизни всех объектов - лучше отписаться.
Прочитать про SOLID, начать применять на практике.
То есть переменную s преобразуем в тип double?
а какое бляйдь значение у FirstSecond?
Вот код для примера:
Console.WriteLine((double)s / k)
Получается double в скобках преобразует переменную s в тип double?
Благодарю
namespace Example
{
class Programm
{
static bool IsSimple(int n)
{
for (int i = 2; i <= n / 2; i++)
{
return !(n % i == 0);
}
}
static void Main(string[] args)
{
DateTime start = DateTime.Now;
int k = 0;
for (int i = 2; i < 1000000; i++)
{
if (IsSimple(i))
{
k++;
Console.WriteLine("{0}{1}", k, i);
}
}
Console.WriteLine(k);
DateTime finish = DateTime.Now;
Console.WriteLine(finish - start);
}
}
}
Какого хера пишет, что "Programm.IsSimple(int)": не все ветви кода возвращают значение.?
namespace Example
{
class Programm
{
static bool IsSimple(int n)
{
for (int i = 2; i <= n / 2; i++)
{
return !(n % i == 0);
}
}
static void Main(string[] args)
{
DateTime start = DateTime.Now;
int k = 0;
for (int i = 2; i < 1000000; i++)
{
if (IsSimple(i))
{
k++;
Console.WriteLine("{0}{1}", k, i);
}
}
Console.WriteLine(k);
DateTime finish = DateTime.Now;
Console.WriteLine(finish - start);
}
}
}
Какого хера пишет, что "Programm.IsSimple(int)": не все ветви кода возвращают значение.?
>static bool IsSimple(int n){
>for (int i = 2; i <= n / 2; i++)
>IsSimple(2){
>for (int i = 2; i <= 2 / 2; i++)
> uhm...
Выручил, спасибо огромное
Нужно написать приложение, которое может загружать и редактировать большие файлы.
Дополнительно: Пакетная обработка нескольких файлов.
Я так понимаю это обработка в несколько потоков?
При каждом новом срабатывании кнопки USE я должен создавать новый поток, для обработки другого файла, во время обработки текущего. Какую инфу почитать насчет ресурсов, что бы дополнительные потоки не создавались, когда есть не занятые уже созданные?
Во-первых, скидывай код в читабельном виде. Отступы не просто так придумали.
Во-вторых, у тебя там не все ветви кода возвращают значение.
> Какую инфу почитать насчет ресурсов, что бы дополнительные потоки не создавались, когда есть не занятые уже созданные?
Сделай так что бы незанятых не было. Поток делает свое дело и в конце совершает сиппоку. И все тогда будет хорошо.
> Я так понимаю это обработка в несколько потоков?
Пакетная обработка означает возможность указания нескольких файлов для редактирования. Что именно это значит со стороны твоей компании — хуй знает. С многопоточностью напрямую это не связано, но на винтах с дорогим I/O она поможет тебе выиграть по времени из-за NCQ и считывающей головки, гуляющей по более рациональной траектории, конечно.
> Какую инфу почитать насчет ресурсов, что бы дополнительные потоки не создавались, когда есть не занятые уже созданные?
Я не понимаю, как тебя с таким нулевым опытом вообще рассматривают как кандидата. Начни хотя бы с пула потоков.
В IsSimple нет return в случае, если for цикл не выполнился ни разу.
ноу ноу, ю донт андерстенд. кновинг инлиш из грейт, бат зет гай даз нот кнов зе ворд прайм, вич из аппроприэйт ту намберс. инстэд оф ит хи юзес симпл
Какая есть такая же простая документация по C#? Лезть каждый раз в интернет или на docs.microsoft не очень удобно.
В VS есть Intellisence, охуенно работает, расскажет тебе всё и про всех.
Есть то ли плагин, то ли в настройках шняга, чтлбы по ф12 открывалась мсдновская документация по методу/классу/вотэвэр. Сам не пользуюсь, так как 500к/нс принципал фриланс архитект, но недавно наткнулся на скрины - выглядело удобно. Короче гугли анон вкатывайся в го, нахуй тебе этот сишарп.
Помогите, пожалуйста, с задачей на шарпе:
В массиве из 10 целых чисел подсчитать сумму элементов, более чем в 2 раза превышающих минимальный.
Чет сложно. Как это вообще сделать?
А в чем проблема? Ты не знаешь как массив создать?
Руками - ни по каким.
Партиал нужен если есть код от автогенерации некоторым инструментом, в который лучше руками не лезть. Другие применения возбраняются.
class VasyanLabaPidorMain
{
void HuySasiMain()
{
int Min, Number;
Random PishovNahuy = Random();
int[] Sich = new int[10]; // Массив
for(int i = 0; i<10; i++)
Sich = PishovNahuy.Next(1, 30); //Заполнение случаными числами от 1 до 30
Min = Sich[0]; //Присвоение переменной минимального значения первый элемент массива
for(int i = 0; i<10; i++) //Вывод Массива на экран
Console.Write(Sich + " ");
Console.WriteLine();
for(int i = 1; i<10; i++) //Сравнивает Минимальную переменную с элементами массива от 2го до последнего.
{
if(Sich < Min)
Min = Sich;
}
Console.WriteLine("Минимальное значение массива: {0}", Min);
Number = 0;
for(int i = 0; i<10; i++) //Ну ты понел
if(Min == (Sich / 2) )
{
Console.WriteLine("Элемент в два раза больше минимального {0}", Sich)
Number += Sich;
}
Console.WriteLine("Сумма элементов в два раза больше минимального{0}", Number);
}
}
Как то так. Говнокод не проверял, если что.
Если помогло подкинь деньжат на Battle.Net Krema#2375, по возможности. Почувствую себя гомофрилансером 100К/парсек. Ну и на овердроч накоплю может когда нибудь.
class VasyanLabaPidorMain
{
void HuySasiMain()
{
int Min, Number;
Random PishovNahuy = Random();
int[] Sich = new int[10]; // Массив
for(int i = 0; i<10; i++)
Sich = PishovNahuy.Next(1, 30); //Заполнение случаными числами от 1 до 30
Min = Sich[0]; //Присвоение переменной минимального значения первый элемент массива
for(int i = 0; i<10; i++) //Вывод Массива на экран
Console.Write(Sich + " ");
Console.WriteLine();
for(int i = 1; i<10; i++) //Сравнивает Минимальную переменную с элементами массива от 2го до последнего.
{
if(Sich < Min)
Min = Sich;
}
Console.WriteLine("Минимальное значение массива: {0}", Min);
Number = 0;
for(int i = 0; i<10; i++) //Ну ты понел
if(Min == (Sich / 2) )
{
Console.WriteLine("Элемент в два раза больше минимального {0}", Sich)
Number += Sich;
}
Console.WriteLine("Сумма элементов в два раза больше минимального{0}", Number);
}
}
Как то так. Говнокод не проверял, если что.
Если помогло подкинь деньжат на Battle.Net Krema#2375, по возможности. Почувствую себя гомофрилансером 100К/парсек. Ну и на овердроч накоплю может когда нибудь.
Ну если найти минимальный и потом все, которые в два раза, то это 2н, это линейный рост, оптимально, наверное. Можно ещё отсортировать за nlogn, взять первый элемент, по log n бинарным поиском найти первый элемент, больший чем в два раза первого и сложить все, начиная с него и до конца. Но это хуепляски и дольше, хотя на собесе наверное понравится кому-нибудь.
>massyv.Min()
Будет на каждой итерации вызываться, что даст сложность Н^2
Линк убивает мозг, а вслед за ним и производительность.
Помогите, пожалуйста, с задачей на шарпе:
Есть два целых числа. Нужно их сложить и вывести результат на экран.
Чет сложно. Как это вообще сделать?
Я про подход к решению через жопу
>юнити-пограммист на шарпе
>не думать о производительности
МАМ ТОРМАЗИТ УБОГИЙ УНИТЕ А НЕ МОЙ ГОВНОКОД
Около недели, но там простенькое задание на самом деле:
Implement the REST-service using C# and ASP.NET Web Api that retrieves, saves, and returns data (JSON-objects) of forms.
Нашел msdn гайд: https://msdn.microsoft.com/en-us/library/ms228602(v=vs.90).aspx
Насколько он годный?
Мастером создаёшь проект - веб сайт, оставляешь галку веб апи.
Далее по любым гайдам на ютубе, там сложно что-то сделать не так.
>>1005785
Гайд нормальный.
Спасибо, няш.
Хочу у вас попросить норм источников про многопоточность, а то не шарю в ней нихуя, а потрогать хочется
Какая же ты все-таки мразь - пошел работать, а язык даже нормально не удосужился выучить. Сука.
Удаляешь все проекты написанные на C#, устанавливаешь F#. Гопоточность сразу во все ворота полезит.
Какой же дебил, пиздец, мне понадобилось 2 недели чтобы изучить шарп с нуля после С++ и сходу использовать async/await, но работу на нём мне естественно не предложил никто.
Че там изучать? Это же сиподобная пораша. Синтаксис и с нуля за три недели изучается.
А вот всякие фреймворки, паттерны солиды и прочий синтаксический сахарок приправленный ООП парашей это конечно подольше.
Рихтер для понимания. Там старо, но понятно и достаточно глубоко.
Concurrency in c# cookbok - современные веяния и примеры использования
> многпоточность
> async/await
> но работу на нём мне естественно не предложил никто
Ну, я даже не знаю.
Нужно написать тест и потом интегрировать его в сайт,как это сделать?
Спасибо
так и напиши. Приведи минимальную версию фреймворка. Можно еще проверить, под какими версиями винды пойдет.
А как? И как узнать нагрузки на оперативу/процессор. Никогда раньше не сталкивался с этим.
Сколько денег получаешь? В каком городе работаешь?
Про многопоточность, в общем-то, в любой книге из шапки можно прочитать. Не пытайся копипастом разобраться из чужого кода. Хреново это, не понимать сути.
> И как узнать нагрузки на оперативу/процессор.
Визуал студии F11 нажми, 300К в секунду мамина.
Моя цель написать программу которая позволит через консоль вбивать эту инфу и читать инфу с нашего джейсон файла.
Подскажите как это ебнуть или хотя-бы ссылку где можно почитать каким это образом делается, всем заранее спасибо.
Моя цель написать программу которая позволит через консоль вбивать эту инфу и читать инфу с нашего джейсон файла.
Подскажите как это ебнуть или хотя-бы ссылку где можно почитать каким это образом делается, всем заранее спасибо.
сорян за дабл запрос, лагануло шот
сорян за дабл запрос, лагануло шот
сорян за дабл запрос, лагануло шот
сорян за дабл запрос, лагануло шот
сорян за дабл запрос, лагануло шот
сорян за дабл запрос, лагануло шот
есть метод из которого в цикле запускаются потоки и после цикла выполняется некоторое действие. так вот действие должно выполниться только после завершения всех потоков.
т.е. примерно так:
while(..)
{
TaskFactory.StartNew(()=>DoSomething());
}
TaskFactory.WaitForAll();//вот тут должно быть что-то, что ждет завершения всех потоков из цикла
DoSomethingAfterAlllThreadsEnded();
Есть годный для этого класс Parallel с тремя статическими методами
Вот из моей старой лабы кусок кода
http://ideone.com/Oi3RaD
Там выполняются все указанные действия параллельно, и только когда все action закончатся, вызывается блаблабла.CopyTo();
Помимо инвоук там есть еще for и foreach. Их синтаксис я не помню, но он такой же простой как и у invoke.
большое спасибо, анон, обязательно ознакомлюсь. мб посоветуешь, где про это можно ещё почерпнуть немного полезной инфы
Вообще, насколько я помню, про Parallel больше полезной инфы, чем по тем же тредам и таскам возможно, потому что применение гораздо более узкое, или я к моменту изучения параллел уже матерым стал в многопоточности/асинхронности
Вообще, можешь посмотреть здесь. Вроде достаточно подробно и ясно написано, учитывая что описывать там не так много.
https://metanit.com/sharp/tutorial/12.4.php
https://professorweb.ru/my/csharp/thread_and_files/level2/2_6.php
https://professorweb.ru/my/csharp/thread_and_files/level2/2_7.php
https://msdn.microsoft.com/ru-ru/library/system.threading.tasks.parallel.invoke(v=vs.110).aspx
спс, гляну
Спрашиваю для того, чтобы не получилось вот так.
Годный туториал по наследованию в C# - никогда не наследуйся от классов. Имплементируй интерфейсы.
Получится ли написать серьезный современный проект на последнем?
Лол, и ты мне предлагаешь в каждом классе (Player, Zombie1, Zombie2......, Dog21....) прописывать одинаковый метод Die()?
Нет, он, скорее всего посоветует тебе таки прочитать хотя бы базовое ООП и будет прав.
(разделяй логическое и программное представление, все твои собаки, зомби и игроки - один класс с разными параметрами и компонентами(учи агрегацию), а не куча классов)
>все твои собаки, зомби и игроки - один класс
А туториалы говорят, что это все разные классы, которые наследуются от Animal, например. Хочешь сказать, они врут?
Да, всегда бесило что этим поясняют ООП, это совершенно не соотносится с реальностью, утка - не наследник животного, утка - это животное у которого есть (звукоиздающий объект = клюв), (объект перемещения = утиные лапы и крылья) ну и мозг - мозг с поведение = поведениеУтки
Всё равно подход с зомби, дог и плеер неверен, это можно сравнить с разными окошками, у одного серая рамка и чёрный фон, у другого белый фон и синяя рамка, они одного класса, но разные параметры. Да и посыл в том, что если тебе нужно что-то писать много раз, то скорее всего на самом деле стоит разобраться с абстракциями.
Например вот библотека Басс.ДЛЛ, или дотнетБассДЛЛ.
Вот как она написана?
Я могу такую же сделать на шарпе?
И вообще зашквар ли использовать сторонние беблиотеки в проектахъ Для портфолио или лучше все и все писать самому?
Ну вообще интересно как писать подобные шутки, анпример для работы с сетью. Может есть какая то книжка?
Давай тогда туториал, в котором это объясняется. Собственно, я с этого вопроса и начал.
>>1007340
Ну я вполне реальные классы описал. Это я с юнити пытаюсь подружиться, и хочу сейчас определиться со структурой классов для игровых персонажей. Так что да, зомби, игрок, собака это все реальные примеры с методом Kill().
В консольном этот код работает:
public void Index()
{
DoThingAsync().Wait();
}
В веб-приложении страница зависает:
public ActionResult Index()
{
DoThingAsync().Wait();
return View();
}
С этим кодом так же зависает:
public async Task<ActionResult> Index()
{
await DoThingAsync()
return View();
}
Хз где взять туториалов, слишком много источников читал, везде по чуть-чуть понимал, могу пояснить почему твои зомби плохо.
Вот смотри, у тебя зомби и собака, чем они отличаются? Скином и анимацией, колвом хп, поведением, атакой, намного легче вместо кучи классов сделать один "персонаж", задать ему хп, скин, поставить нужные анимации, приделать компонент атаки и компонент управляющий, который реализует нужную логику поведения персонажа, конечно, если ты не планируешь много делать, такой подход излишне сложный и можно как ты делаешь, но с описанным мной подходом, ты сможешь например просто создавать ассеты и через xml создавать разные виды врагов, мб чуть тинт спрайта поменять или сменить размер модельки, создавать новых врагов, добавляя строчки в файле, а не создавая новый класс и рекомпиля проект, ну и не придётся ебаться с рутинным созданием новых классов ради одного нового подвида.
С поведением тоже просто, твой килл просто вызывает плей деасаниматион, который ты просто делаешь полем персонажа. Типо такого. Юнити же как раз со своей компонентной системой этому способствует.
Неправильно, я имел в виду инстанс животного, ты приебался к словам, там из контекста ясно
Абстрактный класс для общих методов и их реализации, интерфейсы просто для общих методов.
Ну, можешь делать массивы массивов, а не двумерный массив. bool [][] gameField вместо bool [,] gameField.
Есть мнение, что jagged array более производительные, чем multidimensional по причинам оптимизации CLR для одномерных массивов:
https://stackoverflow.com/questions/597720/what-are-the-differences-between-a-multidimensional-array-and-an-array-of-arrays
https://stackoverflow.com/questions/4648914/why-we-have-both-jagged-array-and-multidimentional-array
https://stackoverflow.com/questions/468832/why-are-multi-dimensional-arrays-in-net-slower-than-normal-arrays
Нихуя тебя не понял, какой еще басс.ДЛЛ/дотнетбассДЛЛ.
DLL в .NET и DLL в компилируемом в машинный код языках - разные вещи. Как и exe у .net и у крестов, например.
Большие сторонние библиотеки - не зашквар. Во многих конторах используют всякие EF и прочие фреймворки/АПИ. Криптографию тоже рекомендуется брать уже готовую и проверенную (типа crypto++), а не писать самому.
Как писать - просто берешь и пишешь, хули тут думать. У C# есть как классы для реализации своей хуйни, так уже и готовый WCF. Книги хуй знает, не умею читать.
Если писать по солиду, то наследование очень редко когда реально нужно и полезно
поясни за WCF, очень часто вижу в вакансиях требование к этой хуйне, так и не вижу адекватного описания, везде очень абстрактно. За 2 года разработки сложного облачного сервиса так ни разу и не слышал эти слова в нашей команде.
Говно ебаное. Типа мультиплатформенная технология удаленных служб. Даётся три стула на выбор: named pipes для одной машины, TCP для интранета при условии, что клиент на .net и http для любых машин с клиентами на любом языке (что, в общем то, превращается в ASP.NET). Сам сижу сейчас разбираюсь, и все вопросы/упоминания в этом треде про WCF были от меня. Вообще, на вид гибкая вещь, но бывают моменты, когда клиентское приложение падает из за службы вообще хуй пойми из за чего. Короче, если не хочешь рисковать серверными решениями от коммьюнити или сам настраивать гибкий сервер, то можешь выбирать WCF.
Нахуя столько лишнего?
>>1007354
>и через xml создавать разные виды врагов
>просто вызывает плей деасаниматион, который ты просто делаешь полем персонажа
Вот тут совсем не понял. Остальное, если понял правильно, то выходит мне нужен один класс на всех живые существа? Значит делать в нем несколько разных конструкторов под каждый вид?
>>1007471
И? Я так и собирался делать, но мне сказали, что не стоит.
>>1007507
А в моем случае?
Так вот в чем мой вопрос - может я туплю и где-то есть задания соответствующие этой книге ? Или мне самому себе задания надо придумывать ?
Это по сути все-равно основы, 5.0 - 6.0 особо изменений не было.
Купил потому что книга всяко удобнее пдф, да и б.у. цена была сладкой.
>книга всяко удобнее пдф
Приходи когда по книге изобретут полнотекстоый поиск.
>5.0 - 6.0 особо изменений не было
Нихуя себе заявление. Одно появление async чего стоит.
Если что в книгах обычно бывают в конце словарь терминов со ссылками на страницы.
>>1007566
двачую
>Если что в книгах обычно бывают в конце словарь терминов со ссылками на страницы.
На дворе сорок первый век, а эти лудиты всё еще листают страницы.
Ну как тебе сказать. Про async вообще то веское замечание сказано >>1007562
Товарищ по 4.0 научится плодить громадные конструкции для асинхронности со всякими wait и прочими, когда есть async await. Также всякая удобная интерполяция строк в 6.0, фишка в виде паттерн метчинга для switch в 7.0, кортежи оттуда же.
>Вот тут совсем не понял.
Ну с xml можешь пока забить, это просто возможность делать в игре врагов, заполняя параметры в файлах, а не редакторе, так удобнее.
Про анимацию, у тебя есть поле у класса, это поле анимации смерти, функция смерти берёт эту анимацию и проигрывает её.
И нет, тебе нужны не разные конструкторы а один, твои все существа будут создаваться примерно так:
Creature zombie = new Creature("zombie.skin", ZombieAttack, ZombieMovement, ZombieAnimations);
Creature dog = new Creature("dog.skin", DogAttack, DogMovement, DogAnimations);
и так далее, то есть один конструктор делает разных существ, это конечно приближённый вариант, тебе надо как-то передавать все эти параметры в код, юнити позволяет же префабы делать, в которых в поля можно и спрайты перетащить и цифры написать.
Просто смотри в чём суть, ты путаешь представление в твоём понимании, и представление для компьютера, все живые существа для него - одно и то же, это просто что-то, у чего есть анимация, скин и поведение.
Вообще я очень хуёвый учитель, и в юнити это сложнее пояснять изза компонентной системы, в которой по сути всё это нахуй не нужно, всё есть гейм обджект, хочешь чтобы он двигался - присоединяешь логику движения, хочешь чтобы кусался - присоединяешь компонент атаки, хочешь чтобы он ещё был сундуком - присобачиваешь компонент-контейнер. Наследование там только под капотом, где каждый компонент - наследник компонента, с именем, парентом и прочими, можешь по нему оценить, насколько похожи их различия между MeshRenderer и BoxCollider на твои между зомби и собакой.
Спасибо тебе за детальное пояснение, а то обычно на такие вопросы в тредах посылают в гугл или сразу нахуй. Займусь сейчас, пожалуй, генерацией карты, а потом еще вернусь к персонажам.
float tenth = 0.1F;
float one = 1F;
WriteLine(one - 10F tenth);
выдаёт -1,490116E-08, а
float one = 1F;
WriteLine(one - 10F 0.1F);
выдаёт 0?
Ну т.е по типу t4 text template, только я генерировал его с помощью методов которые сам написал.
Т.е все это выглядит так:
namespace YobaApllication
{
class Programm
{
static void Main()
{
Console.WriteLine("Hello Yoba");
}
}
}
Сейчас он генерируется в консоль или в тексбокс, если угодно.
А как его скомпилировать?
Скажите, пожалуйста, почему
float tenth = 0.1F;
float one = 1.0F;
WriteLine(one - 10F tenth);
выдаёт -1,490116E-08, а
float one = 1F;
WriteLine(one - 10F 0.1F);
выдаёт 0?
Сучья разметка.
https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
Смотри какая статья есть годная про флоаты.
Спасибо, заодно и в Reading попрактикуюсь.
это далеко не основы языка, если сразу с нуля в асинки и сложный сахар погружаться, то нихуя не понятно будет. Пускай научится синхронный код писать, а потом уже в асинки углубляется.
Dependency Injection in .NET Симана.
Его блог
http://blog.ploeh.dk/tags/#Dependency Injection-ref
ясен хуй, но ты же не будешь изучать физику с теории относительности? сначала ньютоновскую, чтобы понять базовые вещи, епта
https://support.microsoft.com/ru-ru/help/304655/how-to-programmatically-compile-code-using-c-compiler
Спасибо!
Екб что ли? Напиши CRUD сервер с entity framework и клиента к нему - стопудово на джуна возьмут куда-нибудь.
Спасибо, дойду до работы с ado.net постараюсь придумать что-то.
Статичный метод не требует экземпляр класса для работы. И не может обращаться к экземплярным методам/полям/свойствам.
У static класса все поля/методы/свойства static по дефолту, можно не указывать.
Кстати, в Java static у классов имеет совсем другой смысл (хуета там какая-то).
Требуется поменять 1-ю и последнюю буквы в каждом слове строки из листбокс1. Полученную строку вывести в листбокс2. Не могу сообразить как это сделать.
Мой пикрил куска программы
Точнее будет сказать что у статик класса могут быть только статик члены
спасибо, анон, надеюсь и рус где-нибудь найдется
Тут все ок, но дело в том что запускается консоль. А нет ли возможности вывода информации не в консоль, а в txt?
Ну или в строку, или вообще все что угодно. Мне нужно результат запихнуть в текстбокс.
Вот у меня есть текстовый файл в котором допустим 20 строк, каждая из которых такого вида "хуйпизда:нинужно=99".
Мне нужно пройтись по всем строкам и запихнуть в массив стрингов со всех строк "хуйпизда" т.е. все что до двоеточия, и в массив даблов забрать "99", т.е. все что после знака равно.
Как это лучше реализовать?
Регекс-то зачем?
Два сплита блять
Или нужно как-то по-другому всё это реализовать?
private int current;
private int finish;
public int Current
{
get
{
return current;
}
private set
{
current = 1;
}
}
public int Finish
{
get
{
return finish;
}
private set
{
Random rndNumber = new Random();
finish = rndNumber.Next(75, 125);
}
}
public void IncreaseBy1()
{
current++;
}
public void MultiBy2()
{
current *= 2;
}
public void ComeToStartValue()
{
current = 1;
}
public void StartGame()
{
}
Или нужно как-то по-другому всё это реализовать?
private int current;
private int finish;
public int Current
{
get
{
return current;
}
private set
{
current = 1;
}
}
public int Finish
{
get
{
return finish;
}
private set
{
Random rndNumber = new Random();
finish = rndNumber.Next(75, 125);
}
}
public void IncreaseBy1()
{
current++;
}
public void MultiBy2()
{
current *= 2;
}
public void ComeToStartValue()
{
current = 1;
}
public void StartGame()
{
}
Нормально ли вот это:
https://professorweb.ru/my/csharp/charp_theory/level1/infocsharp.php
Или c# in a nutshell всё же намного лучше? И напомните, чем бело-синяя версия отличается от бело-красной?
Разве Рихтер это овервью языка для повторения? Это же наоборот куда более сильное колдунство?
Джон Скит, ван лав.
Вы сами всегда следуете этому правилу? Ну, или хотя бы в основном? И если да, то поясните и замотивируйте мне, пожалуйста, почему так, а не "классы - с большой, а то, что им принадлежит - с маленькой"
Нет, это я прекрасно понял. Собственно, обчитался и потому спрашиваю.
Меня интересует почему нотации именно такая,а не, скажем, как в Java, которую я примитивненько описал выше. Мне бы хотелось понять почему так и поверить в то, что это действительно правильно.
Я, вероятно, слишком костноязычен чтоб объяснить все, эх.
Ну, вот, джаванотация, например. Там размер букв объясняется тем, что в языке все подчинено классам,там не может быть свободных переменных или методов. И потому все, что /подчиняется/ пишется с маленькой, в верблюдоблядском стиле, а то, чему подчиняется и что всегда будет стоять в самом начале - с большой.
А здесь /почему/ методы с большой?
Ну блядь принято тут так. Ты ещё поспорь, почему в джаве кэмэл кейс, а не снейк кейс.
>А здесь /почему/ методы с большой?
Это красиво и удобно. Простое правило: пиши все с большой и не забивай голову что чему подчиняется.
>Выглядит как удобный костыль, чтоб не писать сеты и геты.
Да это он и есть. Индусам слишком сложно явно написать тривиальный гет-сет и им упростили жизнь.
Еще есть такая херня: меньше кода => меньше вероятность ошибиться. Весь автогенерейт частично оправдиватся еще и этим, мол человек слабое звено даже в тиривиальном коде. Но это несостоятельная херня, так как весь автогенерет так или иначе перезжает в оперативку кодера, а она не резиновая, что ведет к дополнительным вдупления и ошибкам на ровном месте.
Возможно потому что тут есть делегаты, а значит переменным можно приравнивать методы, и это никак не отличается визуально от присваивания одной переменной другой, а так можно отличить что именно присваивается, просто поле или функция, алсо тут есть свойства, обращение к которым как к полям, но ведут они себя как методы.
Ты неправильно понял инкапсуляцию, стоит подучить. Суть не в приватах и общем доступе, суть в ограждении прямого логически доступа.
Вот смотри, если тебе внезапно понадобиться повесить евент на получение поля, например в игре, когда у тебя кто-то получает урон, раньше ты просто наносил его, но теперь хочешь чтобы он ещё говорил об этом игре, что ты делаешь со свойством? Ты переписываешь его, добавляешь отправку сообщений. Если бы у тебя было поле ты бы везде где к нему доступ вынужден был бы изменять всё. А автоматические проперти просто для сокращения необходимости писать пустые сеттеры и геттеры, которые просто передают поле, чтобы было на потом, и если что ты их допишешь. А ещё ты можешь объявить там уровни доступа гету и сету, чтобы ограничивать доступ.
Ну точнее, в сокрытии реализации тоже дело, но так и свойства не для приватных полей, а для внешнего интерфейса.
Пишу игру, есть поле 10х10 клеток, на каждой клетке может находиться по нескольку разных объектов с разными свойствами (например, на одной клетке находится "Пол", "Стул", "Книга"). То есть мне нужен массив 10х10, где каждый элемент это List<Object>, правильно? И значит мне все эти объекты "Пол", "Стул", "Книга" наследовать от "Object"? Или я чего-то не понимаю?
В целом, да. Но лучше не object, а abstract GameObject, чтобы не положить случайно в клетку массив, число или другую клетку.
Либо можно пойти обратным путем - хранить список объектов с их координатами.
Кстати, реквестирую геймдизайнеров, чтобы сказали, какой из методов правильнее.
>Но лучше не object, а abstract GameObject
Ну обджект я там написал условно, в реальности у меня есть класс MapObject. И я сейчас как раз пытаюсь отловить эксепшн, который мне бросает юнити на метод .Add для списка.
По непонятной причине всё сыпется на 20й строке. MapObject правильный, массив с элементом [0,0] существует. Может это из-за версии дотнет фреймворка, у юнити 3.5.
Ты создал массив листов, заполненный нуллами, пытаешься в нулл добавлять объекты.
Я тебе специально написал что массив заполнен нуллами, ты создаёшь массив, да, чему равен каждый элемент в нём? правильно нихую
Короче, тебе надо создавать лист перед первым добавлением в ячейку, а лучше сразу в каждой при инициализации
>>1009898
Не понимаю, запутался. Можешь эту строчку кода переписать под "тебе надо создавать лист перед первым добавлением в ячейку, а лучше сразу в каждой при инициализации"?
mapStructure[0,0] = new List<MapObject>();
mapStructure[0,0].Add(tttt)
Это потому что у тебя массив листов объектов, ты создаёшь массив, но не листы, их нужно отдельно создавать, потому что лист это объект в шарпе и по умолчанию массивы создаются с дефолтным значением, для чисел 0, для объектов null
Но это же хуйня получается, выходит что я не могу иметь неизвестные листы! Это неприемлемо для моего случая.
mapStructure[0,0] = new List<MapObject>();
С вот этим заработало, спасибо.
Ну слава богу
>Кстати, реквестирую геймдизайнеров, чтобы сказали, какой из методов правильнее.
Так это же не гейдизайнеров проблема. Они такими вещами вообще не занимаются.
Вообще иметь поле клеток с кучей пустых листов это очень расточительно по памяти и подходит только для маленьких карт. Но свой профит есть - напрмер можно почти мгновенно определить, что находится в соседней клетке и если в игре существуют многоклеточные обекты, то размещения их на карте будет менее сложным.
смотри, 255х255х(размер ссылки 64 бита = 8 байт)/(размер килобайта 8) = 508 килобайт + копейки на внутренние приблуды массива, сам думай, будет поле в два раза больше, будет 2 мегабайта уже. И это только на пустое, ничем не заполненное(даже без листов) поле.
Ну тогда должно быть без проблем. У меня половина из всего пространства это пустой космос без объектов, а остальные клетки будут заполнены 1-5 разных объектов.
> У меня половина из всего пространства это пустой космос без объектов
Возможно стоит их оставить без нихуя в качестве оптимизации. Если клетка изначально предполагается как всегдапустая, то нет смысла выделять память на описание массива того, что в ней могло бы находится.
Воооот. Это больше похоже на логическое обоснование. Спасибо. Пойду хоть разберусь, что это
Всё? Переменные же с маленькой
https://tproger.ru/books/free-csharp-books/
Стоит на что то обращать внимание?
И я не про вкатывание с нуля. А вот те книги где учат ООП на рабочих примерах.
>>1010287
Ну это же игровой движок с 60+ фпс на старом ноутбуке, имейте уважение!
Вот я помню игрался с движком MonoGame, он у меня за 120 фпс отжирал всё ядро, и при этом в нем не было даже графики никакой, лул.
> Разница в памяти ~7мб. Полностью приемлимо
И вот так забивая хуй на очереджные 7 мегабайт получилась андромеда.
>var obstacleItem = map.Struc[x,y].SingleOrDefault(ob => ob.IsObstacle == true);
Какой же линк охуенный, хоспаде!
>>1010292
7МБ за отсутствие костылей это очень хорошая сделка, как по мне.
Вот именно для таких случаев в вузиках рассказывают про Sparse matrix и способах её хранения. Например, в словаре.
Если хочешь кодить, почитай хотя бы алгоритмы и структуры данных или курсы посмотри, намного легче и приятнее будет. (А там ещё и графы для пасфиндинга пойдут, поиски текста, очень полезно). Это совсем не долго, зато в кодинге лучше разбираться станешь на порядок.
По поводу твоего вопроса, смотри, словари имеют постоянную скорость доступа к элементам(как у массива) в общем случае, особенно если, как у тебя, карта в основном пустая, одна проблема, что ему надо расширяться, когда он заполняется на определённый процент, что он и делает, создавая новый массив и копируя все элементы в него по новой, что может быть медленно, если твоя карта 255х255 будет почти полной. Но да, плюс в том, что памяти он будет требовать по количеству полных клеток + ещё чуть. И надо не забывать удалять List из клетки, в которой ничего не осталось.
Гитхаб обычно не нужен.
Сам паттерн. Razor. Viewbag, viewdata, tempdata. Экшены, принимающие типизированные объекты. Секции view. Роуты. Стандартная аутентификация. DataAnnotation. Web api.
Язык сишарп на высоком уровне, конечно же.
Не будет лишним бутстрап и джиквери.
>Razor. Viewbag, viewdata, tempdata
Разве вьюбаги и пр. не зашквар? Я вроде учил что кошерно использовать вьюмоделы если больше чем модель нужна.
>Экшены, принимающие типизированные
Это для валидации форм?
>Секции view
Во вьюхах для паршалов?
>Роуты
Достаточно уметь прокинуть новый маршрут?
>Стандартная аутентификация
Ну тут бм понимаю.
>DataAnnotation
Опять таки для валидации?
>Язык сишарп на высоком уровне
Насколько высоком? Вроде при работе проблем по синтаксу не возникало.
Вьюбаги - зашквар, но иногда приходится.
> 7МБ за отсутствие костылей это очень хорошая сделка, как по мне.
> Какой же линк охуенный, хоспаде!
Ты уж определись, любишь ты костыли или нет.
Наличие батарери. Урезанные видеокарты. Лептопные процы. Разрешение экрана 1366 вместо 1920. Если винда заводская, то и по имени компа "Lenovo-PC".
Но главный вопрос конечно же "нахуя?".
Что пишут на c#
Нет, ну ты спросил - я ответил. Да, для каждой задаче в шарпе есть свой стэк технологий. Если что-то конкретное интересует - спрашивай.
Вот ты охуеешь, когда узнаешь, что стульев там дофига, и каждый со своими особенностями.
Ну типа инструменты шарпа и все остальные
> Писать под микроконтроллеры на .net как собрался?
Ох уж эти ньюфаги...
https://ru.wikipedia.org/wiki/.NET_Micro_Framework
>C# тред
>Что пишут на c#
>советует JavaScript
Совсем заблудился? Нахуй ты вообще это написал?
Закоментить эту строку в коде.
Окей, сделал, но можно ли как-то полностью убрать мерцающий значок, ожидающий ввода?
теоретически, это можно сделать либо статическими функциями класса Console, либо через WinAPI думаю можно, но это слишком заебно, чтобы объяснять. посмотри вот здесь: http://www.pinvoke.net/index.aspx как из C# через p/invoke вызывать вот эти функции: https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms682073(v=vs.85).aspx
но еще раз, второй вариант это для совсем отбитых, если тебе прямо очень хочется добиться нужного эффекта.
Я именно тот самый отбитый) Спасибо
Пишу игру. В классе Level есть список пуль. Однако, обработка выстрела пули и её создание происходят в классе Player. Как сообщить классу Level о добавлении пули в список?
https://pastebin.com/nvzjnJSC
У тебя шиза? Анон спрашивал как писать йоба движки на шарпе, ты юнити привёл в качестве примера. А теперь у тебя шок и сенсация
Какой у него шиза дебил? Большая часть Unity на мерзких крестах написана, весь тяжелый рендер хуй ты на языке с GC напишешь, под GameBryo ты на Lua можешь писать, но это не значит что GameBryo на Lua написан, внятно тебе пояснил, болезный или ты кофе не выпил?
Или это такой тупорылый троллинг у вас с Сишарпом и юпнити?
Почитал хотя бы ветку обсуждения перед тем как отвечать
Кароче думаю сделать что то с базами данных.
Для практики, и что бы на гит было шо кинуть.
Но не могу определиться с визуальной частью.
Делать на ASP.NET MVC или WPF MVVM? Или на том и на том? Все равно паттерным МВС/МВВМ помогают отделить логику от визуального интерфейса по максимуму.
Что сейчас более востребованно и хорошо выглядит в резюме?
Ну если работа редкая, то значит не такой уж и даун, раз смог вкатиться. Чем занимаешься на работе? Веб? Десктоп с учётом?Просто интересно
Десктоп, который направлен на внутренний рынок. Поэтому формы, которые работают даже на 2000 винде/винсервере 2003.
Сорян, перепутал с одним дебилом.
Сам работаю C#(xamarin) погромиздом в компании. Зашел в тред почитать че по чем тут и прям охуел как ты доходчиво пояснил.
Вот есть у меня 2 метода
public static int Method1()
{
int a = 2;
int b = 5;
return a * b;
}
public static void Method2()
{
var c = Method1();
Method1();
}
Как так может происходить?
Я вызываю в Method2 Method 1 в одном случае с возвратом значения, а в другом без. И все ок, компилятор не ругается
ты вызваешь войд - метод без return
А на что он должен ругаться?
Рекомендую как в классической архитектуре происходит вызов функции. Почитай про стек, адрес возврата, передачу параметров.
https://ru.wikipedia.org/wiki/Стек_вызовов#/media/File:CallStackFrame.png
Спосибо, брат.
Ошибка при попытки запуска проекта: Не удается запустить прграмму "Путь программы".
Отладчик установлен неправильно. Запустите программу Setup для установки или восстановления отладчика.
Как можно переустановить отладчик правильно и где взять Setup? Переустанавливать VS уже пробовал.
Больше статиком возвращающие методы помечай.
public partial class Form1 : Form
{
IDoSmthg smthg;
public Form1()
{
InitializeComponent();
smthg = new Worker(this.button1);
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = smthg.Do(4).ToString();
}
}
interface IDoSmthg
{
int Do(int z);
}
class Worker : IDoSmthg
{
AutoResetEvent are;
public int Do(int z)
{
are.WaitOne(-1);
return z * z;
}
public Worker(Button btn)
{
are = new AutoResetEvent(false);
btn.Click += new EventHandler(btn_Click);
}
void btn_Click(object sender, EventArgs e)
{
are.Set();
}
}
Суть думаю ясна, надо дождаться в методе некоторого события и только после продолжить работу. Как сделать так чтобы не блокировать форму, ведь мне же как раз и надо дождаться клика. И надо это без async/await ибо .Net4.
public partial class Form1 : Form
{
IDoSmthg smthg;
public Form1()
{
InitializeComponent();
smthg = new Worker(this.button1);
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text = smthg.Do(4).ToString();
}
}
interface IDoSmthg
{
int Do(int z);
}
class Worker : IDoSmthg
{
AutoResetEvent are;
public int Do(int z)
{
are.WaitOne(-1);
return z * z;
}
public Worker(Button btn)
{
are = new AutoResetEvent(false);
btn.Click += new EventHandler(btn_Click);
}
void btn_Click(object sender, EventArgs e)
{
are.Set();
}
}
Суть думаю ясна, надо дождаться в методе некоторого события и только после продолжить работу. Как сделать так чтобы не блокировать форму, ведь мне же как раз и надо дождаться клика. И надо это без async/await ибо .Net4.
> Суть думаю ясна
Суть ясна только тебе. Если хочешь что бы тебе помогли, прояви немного уважения к тем, кто будет читать твой код. Используй сервисы с поддержкой форматирования, https://ideone.com/ вполне норм для этого.
Заебесь. Теперь все стало официально непонятно. Если нужно дождаться клика, то у кнопки есть событие, которое она ждет сама. Нахуя тебе костыли городить понадобилось?
Наверно, из-за кривой архитектуры. Пишу игру, есть интерфейс IPlayer с методом Point MakeMove(Board board), и 2 класса реализующих этот интерфейс AIPlayer и HumanPlayer. Класс игры принимает в конструкторе 2 IPlayer и затем после старта крутит цикл, вызывая по очереди методы MakeMove игроков. С ИИ все понятно, используя преданное состояние игровой доски он вычисляет свой ход. А вот человек, после вызова HumanPlayer.MakeMove должен кликнуть по клетке на винформ контроле (у контрола есть событие CellClicked). Вот этого CellClicked я и хочу дождаться в MakeMove.
Игра на винформах в 2017 это охуенно.
Но даже тут у тебя масса возможностей.
1) Создать таймер и каждые n времени обрабатывать данные для всех объектов включая игрока. Клик игрока будет запоминаться в специальном буфере между циклами.
2) Игра полностью пощаговая, ждет действия игрока и все остальные объекты обрабатываются вслед за этим.
3) Создать тупо нормальный обработчик клика и в нем уже все оборабатывать.
>2) Игра полностью пощаговая, ждет действия игрока и все остальные объекты обрабатываются вслед за этим.
Вот я и хочу дождаться действий игрока. Кстати, это не обязательно человек vs комп, я же могу передать в игру 2 HumanPlayer.
>3) Создать тупо нормальный обработчик клика и в нем уже все оборабатывать.
Это как? Пихать всю логику в форму?
Это копия, сохраненная 16 июля 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.