• Как связать две иерархии классов?

    byte916
    @byte916
    Почему бы в родительский класс SpaceObject не добавить абстрактный метод Initialize, который переопределить в каждом дочернем классе, и тогда ваш код сократится до
    void InitializeSpaceObject(SpaceObject spaceObject)
        {
    spaceObject.Initialize();
        }

    А еще, говорят, лучше передавать в параметрах интерфейсы, то есть должно быть так
    void InitializeSpaceObject(ISpaceObject spaceObject)
        {
    spaceObject.Initialize();
        }
    Ответ написан
    Комментировать
  • В чём проблема с доступом к полям структуры внутри списка?

    Когда вы достаете структуру из списка через индексатор, то возвращается ее копия, вот для нее вы и вызываете метод. Потом она уничтожается, а та что лежит в списке останется не измененным.
    Ответ написан
    Комментировать
  • MVVM с ним или без него?

    @MonkAlex
    C#, SQL, Delphi, C++ etc
    Вам не нужен MVVM, если вы не планируете развивать проект дальше, типа поддержка N сайтов c M разных платформ или что-то в этом роде. Если же планируется расширение - MVVM пригодится, хотя бы потому, что можно будет намного легче переиспользовать код.
    Ответ написан
    Комментировать
  • Конструкторы и приравнивание в Си подобных языках?

    Nipheris
    @Nipheris Куратор тега C++
    К сожалению, все несколько сложнее, и вам нужно лучше разобраться, что происходит в обоих случаях.

    В C++ жизненный цикл объекта, место и способ его существования определяется кодом, создающим объект. Иными словами, тот код, который ИСПОЛЬЗУЕТ класс, определяет, автоматическая ли будет создана переменная (Example a(..)), или динамическая (new Example(..)). Да, в коде класса можно ограничить использующий код, запретив использование конструктора копирования и оператора присваивания, но изначально дизайн языка подразумевает принятие решения не "создателем" класса/структуры, а её "пользователем".

    В C# поведение переменной типа класса/структуры зависит прежде всего от самого класса/структуры. Экземпляры классов, т.е. reference-типов, создаются с динамическим жизненным циклом, и для них работает механизм подсчета ссылок и сборка мусора. Экземпляры структур создаются с автоматическим жизненным циклом, переменные структур хранят значения структур, а не ссылки на них.

    Иными словами, выражение new T(...) - это просто унифицированный синтаксис создания экземпляра типа, независимый от природы этого типа. Удобно это или не очень - отдельный разговор, однако в текущем дизайне языка это достаточно логично (особенно в контексте generic-ов). Аналогично, T a - унифицированный синтаксис объявления переменной типа.

    Нельзя слепо сравнивать то, что происходит в C# и в C++.
    Ответ написан
    1 комментарий
  • Возможно ли создавать пользовательские графические интерфейсы для программ написанных на C# .NET, при помощи CSS и HTML?

    @Melz
    Можно, но не нужно. Лучше выучите XAML, там много не надо и все в дизайнере есть. Hover точно можно сделать и вообще кастомизировать до посинения.
    Самое простое - использовать BrowserControl и рендерить ваш хтмл там. Можно еще поднять встроенный сервер и отдавать стразу страницу.

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

    Хотя на C# можно и веб-сайты делать.
    Есть Apache Cordova. Есть WinJS если вам хочется использовать контролы.
    Ответ написан
    3 комментария
  • Книги по Windows Forms на C#. Какие?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Вы правильно увидели. Новых книг по WinForms нет, потому что есть WPF. Изучайте его. Он быстрее, лучше, мощнее. WinForms не развивается дальше, в отличии от WPF.
    Единственно, если вы думаете делать программы не на Windows, а на Линукс, то да - WinForms. Но если под винду, то WPF.
    Ответ написан
    9 комментариев
  • Какова роль Autofac в WPF приложениях?

    @SZolotov
    Asp.net core, MAUI,WPF,Qt, Avalonia
    IoC, DI гуглите.
    Ответ написан
    Комментировать
  • Как указать ссылку на сборку?

    @dmitryKovalskiy
    программист средней руки
    У вас какая-то чисто архитектурная проблема. У вас есть клиент и есть сервер. Они используют некий общий класс? Тогда выносите этот класс и ему подобные в третий проект Util, и ставьте ссылки на util в исходные проекты. Не хотите так делать? Могу вам предложить прогрузить сборку через рефлексию, но за такой подход я бы руки по локоть отрубил.
    Ответ написан
    Комментировать
  • С чего начать учить ASP.NET 5?

    @Codenator81
    На самом деле asp.net 5 и mvc 6 не сильно изменился и если есть опыт в asp.net 4 mvc 5 то пару дней хватает чтоб понять что к чему. Совсем другое дело касаемо других инструментов которые не имеют к нему отношение. Например gulp и bower. Но это стандарт в веб разработке.
    Ответ написан
    Комментировать
  • Как методу IndexOf (из фреймворка .NET), объяснить, что внутри скобок метода, между некоторыми HTML-тегами может располагаться любой текст?

    NYMEZIDE
    @NYMEZIDE
    резюме - ivanfilatov.ru
    1. не пользуйтесь IndexOf для парсинга страниц
    2. или через регулярки тащите данные (не самый простой и надежный способ)
    3. или возьмите либу HtmlAgilityPack (https://htmlagilitypack.codeplex.com/) и через Xpath можно вытащить все что угодно.
    Ответ написан
    Комментировать
  • Как методу IndexOf (из фреймворка .NET), объяснить, что внутри скобок метода, между некоторыми HTML-тегами может располагаться любой текст?

    @dmitryKovalskiy
    программист средней руки
    IndexOf никаким боком не подходит для решения вашей задачи. Для этого есть регулярные выражения и инструменты парсинга HTML. Например HtmlAgilityPack
    Ответ написан
    Комментировать
  • Какая разница между interface в С# и чисто виртуальными функциями в класах С++?

    Nipheris
    @Nipheris Куратор тега C++
    Одно и то же, чисто абстрактные классы в C++ это способ получить функциональность, аналогичную понятию "интерфейс" в тех языках, где оно есть (C#, Java, etc.).
    Благодаря множественному наследованию в C++ среди базовых классов могут быть как классы с реальным поведением (т.е. с реализациями каких-либо методов), так и классы-"интерфейсы", т.е. классы только с pure-virtual функциями-членами.
    Ответ написан
    Комментировать
  • Удаленная БД, как лучше реализовать?

    @nirvimel
    Это называется репликация.
    Ответ написан
    Комментировать
  • Актуальны ли старые книги по Си?

    akarin
    @akarin
    Смотря какая.
    Язык программирования СИ Кернигана и Ритчи(1978) классика.
    Ответ написан
    2 комментария
  • Нужна хорошая книга по C# - Win Forms?

    newross
    @newross
    Product owner
    Лучше сразу WPF изучать вместе с MVVM. Книги - Троелсон для разминки, дальше "WPF: Windows Presentation Foundation в .NET 4.5 с примерами на C# 5.0 для профессионалов". Курсов тьма на Pluralsight.
    Ответ написан
    Комментировать
  • Тестовое задание на C# с базами данных и графиками?

    Nipheris
    @Nipheris Куратор тега C#
    Я часто советую взять что-нибудь из реальной жизни и автоматизировать. Я вот, к примеру, так и не нашел для себя удобной домашней бухгалтерии - чтобы вбивать чеки за день максимально быстро (с автодополнениями всякими), и считать простейшую статистику - набросал за пару вечеров сам. То же и вам советую - может вы любите что-то, спорт, или игры какие - нескончаемый источник статистики, графиков, и данных. Поставил личный рекорд стометровки - открыл прогу, забил инфу.
    Если любите книги - то можете потренироваться в автоматизации личной библиотеки.
    Ответ написан
    Комментировать
  • Использовать ли UserControl в WPF MVVM?

    @Hydro
    C#/.NET Developer
    У вас в корне неправильный подход.
    Давайте по порядку.
    Сначала почитайте про DataContext в WPF, потом про сам MVVM (тщательнее, чем до этого).
    По структуре данных: одна таблица - это один тип аггрегации, соответственно другая таблица - другой тип аггрегации, поясню напримере:
    есть таблица продукты (Id, Код продукта) и есть таблица заказчики (Id, Имя, Код заказанного продукта), для таблицы продукты, необходимо создать класс Product
    class Product : INotifyPropertyChanged
    {
      public int Id {get;set;}
      public int Code {get;set;}
      // + реализация INPC
    }

    По INotifyPropertyChanged погуглите что это.
    Затем для таблицы заказчики создать класс Consumer
    class Consumer
    {
      public int Id {get;set;}
      public string Name {get;set;}
      public IEnumerable<Product> Orders {get;set;}
    }

    Данные выбираются из БД и для каждой таблицы должен создаваться экземпляр соответствующего ей класса.

    Теперь по отображению и CRUD:
    Создаете класс с контекстом

    class MyShopViewModel : INotifyPropertyChanged
    {
     // Выбранный элемент, для которого будем отображать модальное окно
      public object SelectedItem {get;set;}
    }


    Где то в коде, где открывается модальное окно, например в методе ShowObjectEditor делаете:
    public void ShowObjectEditor()
    {
      // создаем окно с редактором объекта БД
      var objectEditor = new ObjectEditorView();
      // Устанавливаем ему DataContext, Где myShopViewModel - Объект класса MyShopViewModel
      objectEditor.DataContext = myShopViewModel;
      // показываем окно
      objectEditor.Show();
    }

    В разметке ObjectEditorView
    <Window>
      <ContentPresenter Content="{Binding SelectedItem}"/>
    </Window>

    Но ContentPresenter не знает как его показывать, вот тут и открывается ответ на Ваш вопрос: для каждого типа данных пишете DataTemplate в ресурсах окна, у меня есть два типа - продукты и заказчики, и разметка приобретает вид
    <Window>
      <Window.Resources>
        <ResourceDictionary>
         <DataTemplate TargetType={x:Type Product}>
          // вот тут и описываем чекбоксы и прочую хрен.
         </DataTemplate>
         <DataTemplate TargetType={x:Type Consumer}>
          // вот тут и описываем чекбоксы и прочую хрен.
         </DataTemplate>
        <.ResourceDictionary>
      <.Window.Resources>
      <ContentPresenter Content="{Binding SelectedItem}"/>
    </Window>

    Теперь для каждого типа данных автоматом подтянется своя разметка и располагаться это будет в одном окне.
    Что не понятно - спросите в комментариях.
    Ответ написан
    4 комментария
  • System.Object -> System.ValueType (знаковый - на стеке) - как это?

    Nipheris
    @Nipheris Куратор тега C#
    System.Object является базовым для System.ValueType потому, что C# скрывает от вам процесс boxing-а значений value-типов в ссылочные обертки.
    Где выделяется память для ссылочных типов и типов-значений спецификацией не оговаривается (в текущих реализациях типы-значения иногда (!) выделяются на стеке, но могут быть и на куче, если являются членами ссылочных типов (массивы, другие классы, и т.д.). Для вас важно лишь знать логику поведения: как присваиваются и передаются в функции значения reference и value-типов, остальное - детали реализации.

    Довольно важная для понимая статья: blogs.msdn.com/b/ericlippert/archive/2010/09/30/th...
    Ответ написан
    2 комментария