﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.ru/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Классы и интерфейсы в S#</title>
  <id>~/topic/1162/klassy-i-interfeisy-v-s/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-16T15:29:23Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=1162" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/4171/</id>
    <title type="text">Спасибо, Михаил. 1. Моих нервов не хватало. 2. Выглядит проще обычной сериализации, потихоньку буду ...</title>
    <published>2010-10-12T09:40:53Z</published>
    <updated>2010-10-12T09:40:53Z</updated>
    <author>
      <name>anothar</name>
      <uri>https://stocksharp.ru/users/6089/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Спасибо, Михаил.&lt;br /&gt;1. Моих нервов не хватало.&lt;br /&gt;2. Выглядит проще обычной сериализации, потихоньку буду разбираться. Буду в дальнейшем пользоваться Вашей библиотекой, но пока оставлю свой код, ибо негоже просто так переделывать код.&lt;br /&gt;3. Нет. Но после Вашего вопроса вспомнил, что пару раз я это замечал. Я всегда путаюсь с XmlSerializer, BinaryFormatter и SoapFormatter. Почему-то в книгах чаще упоминают последние два[biggrin] </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/4168/</id>
    <title type="text">1. Стандартная сериализация позволяет контролировать только весь процесс в целом, а не какое-то отде...</title>
    <published>2010-10-12T09:17:01Z</published>
    <updated>2010-10-12T09:17:01Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">1. Стандартная сериализация позволяет контролировать только весь процесс в целом, а не какое-то отдельное поле. Да и реализовать интерфейс IXmlSerializable мягко говоря не для слабонервных.&lt;br /&gt;&lt;br /&gt;2. &lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;public class ErrorInfo&lt;br /&gt;{&lt;br /&gt;   &amp;#91;Field(&amp;quot;error&amp;quot;)&amp;#93;&lt;br /&gt;   public string Info { get; set; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var ser = new XmlSerializer&amp;lt;ErrorInfo&amp;gt;();&lt;br /&gt;ser.Deserialize(s);&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;3. Вы в курсе, что атрибут Serializable никаким образом не относится к XmlSerializer?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/4149/</id>
    <title type="text">На метаданных (атрибуты или xml). Отличается наличием конвертеров. Например, сложные типы (картинки,...</title>
    <published>2010-10-09T16:49:13Z</published>
    <updated>2010-10-09T16:49:13Z</updated>
    <author>
      <name>anothar</name>
      <uri>https://stocksharp.ru/users/6089/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;На метаданных (атрибуты или xml). Отличается наличием конвертеров. Например, сложные типы (картинки, шифрованные строчки, сетевые адреса) в xml так просто не запихать. Приходится создавать структуру только для сериализации, где такие типы упакованы в примитивный формат (строка, число). Ecng.Serialization использует конвертеры на поля. Он превращает сложный тип в простой при сериализации и наоборот.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Вроде в стандартной сериализации можно реализовать свою сериализацию-то есть переопределить целиком. Но это как-то геморно. Я пробовал и не получилось, так что наверняка утверждать не буду.&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;И еще одно большое отличие - SerializatonItem. Это древовидная структура, которая содержит данные для записи в файл (или только то прочитанные из). Плюс в том, что эти данные можно потом передавать куда угодно. И записывать как угодно. Со стандартными сериализаторами такое не прокатит.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;А это не аналог ли XmlDocument?&lt;br /&gt;Вот пример из моего кода:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;br /&gt;&amp;#91;Serializable&amp;#93;&lt;br /&gt;    public class ErrorCallback:ServerCallback&lt;br /&gt;    {&lt;br /&gt;        private static XmlSerializer _serializer = new XmlSerializer(typeof(ErrorCallback));&lt;br /&gt;&lt;br /&gt;        &amp;#91;XmlElement(&amp;quot;error&amp;quot;)&amp;#93;&lt;br /&gt;        public String Error&lt;br /&gt;        {&lt;br /&gt;            get;&lt;br /&gt;            set;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public static ErrorCallback FromXmlString(String s)&lt;br /&gt;        {&lt;br /&gt;            s = &amp;quot;&amp;lt;?xml version=\&amp;quot;1.0\&amp;quot; encoding=\&amp;quot;utf-8\&amp;quot;?&amp;gt;&amp;quot; + &amp;quot;&amp;lt;ErrorCallback&amp;gt;&amp;quot;+s&lt;br /&gt;                +&amp;quot;&amp;lt;/ErrorCallback&amp;gt;&amp;quot;;&lt;br /&gt;            using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(s)))&lt;br /&gt;            {&lt;br /&gt;                return (ErrorCallback)_serializer.Deserialize(stream);&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Пока времени не было чтобы начать реализовать iTrader. Это пример прямо из кода использования стандартной десериализации для callback. для отправки команд я сериализую ручками( для десериализации бы это потребовало очень много времени). Вот пример xml ки которую должна парсить эта функция:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;br /&gt;&amp;lt;error&amp;gt;Описание ошибки&amp;lt;/error&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Напишите, пожалуйста, пример того как это будет выглядеть при Вашей десериализации. </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/4147/</id>
    <title type="text">А можно поподробней. чем она отличается от стандартной? В стандартной можно контролировать названия ...</title>
    <published>2010-10-08T20:35:04Z</published>
    <updated>2010-10-08T20:35:04Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Андрей Ефимов&lt;/span&gt;&lt;div class="innerquote"&gt;А можно поподробней. чем она отличается от стандартной? В стандартной можно контролировать названия полей с помощью атрибутов. На чем основана ваша собственная сериализация/десериализация?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;На метаданных (атрибуты или xml). Отличается наличием конвертеров. Например, сложные типы (картинки, шифрованные строчки, сетевые адреса) в xml так просто не запихать. Приходится создавать структуру только для сериализации, где такие типы упакованы в примитивный формат (строка, число). Ecng.Serialization использует конвертеры на поля. Он превращает сложный тип в простой при сериализации и наоборот.&lt;br /&gt;&lt;br /&gt;И еще одно большое отличие - SerializatonItem. Это древовидная структура, которая содержит данные для записи в файл (или только то прочитанные из). Плюс в том, что эти данные можно потом передавать куда угодно. И записывать как угодно. Со стандартными сериализаторами такое не прокатит.&lt;br /&gt;&lt;br /&gt;Пришлите мне какой-нить юз кейс из транзака и как Вы хотите его использовать с типом S#, а я вставлю код для работы через Ecng.Serialization.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/4124/</id>
    <title type="text">Интересно, а что, там названия у нод и атрибутов любые могут быть? Название полей и атрибутов можно ...</title>
    <published>2010-10-07T12:52:16Z</published>
    <updated>2010-10-07T12:52:16Z</updated>
    <author>
      <name>anothar</name>
      <uri>https://stocksharp.ru/users/6089/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;Интересно, а что, там названия у нод и атрибутов любые могут быть?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Название полей и атрибутов можно контролировать с помощью XmlElement/XmlAttribute. нет названия у меня более понятные. Если поле уж совсем корявое то я обычно делаю нормальное поле. кот не сериализую/десериализую и ПолеAsString кот и сериализуется/десериализуется.&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;Согласен. Я использую свою сериализацию на основе Ecng.Serialization. Отличается от стандартной тем, что можно контролировать процесс сериализации. &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;А можно поподробней. чем она отличается от стандартной? В стандартной можно контролировать названия полей с помощью атрибутов. На чем основана ваша собственная сериализация/десериализация?&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Цитата:&lt;/span&gt;&lt;div class="innerquote"&gt;Так что для себя я решил. Создание нового трейдера начинается с тотальной обертки АПИ. И эта обертка никак не использует типы S#.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Если были бы интерфейсы, а не классы то в моем случае можно было бы создать и на основе интерфейсов S#. Впринципе добавить еще одно поле при стандартной десериализации несложно.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/4121/</id>
    <title type="text">Нет, боже упаси это делать ручками. Да через сериалайзер. Интересно, а что, там названия у нод и атр...</title>
    <published>2010-10-07T12:28:32Z</published>
    <updated>2010-10-07T12:28:32Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Андрей Ефимов&lt;/span&gt;&lt;div class="innerquote"&gt;Нет, боже упаси это делать ручками. Да через сериалайзер.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Интересно, а что, там названия у нод и атрибутов любые могут быть? Или Вы поля у сущности назвали так же, как принято у Транзака? Если второе, то это не очень хорошо. Я раньше так же начинал с Квиком, делать десериализацию ДДЕ данных сразу в сущности. Потом такие траблы начались ввиде больших переделок на добавление нового поля.&lt;br /&gt;&lt;br /&gt;Так что для себя я решил. Создание нового трейдера начинается с тотальной обертки АПИ. И эта обертка никак не использует типы S#. А сам трейдер лишь делает конвертацию данных туда и обратно.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Андрей Ефимов&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Тут основная проблема в том, что я не смогу переопределить сериализацию у Ваших типов( ну или это будет весьма геморно), точнее у их полей.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Согласен. Я использую свою сериализацию на основе Ecng.Serialization. Отличается от стандартной тем, что можно контролировать процесс сериализации.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/4117/</id>
    <title type="text">Нет, боже упаси это делать ручками. Да через сериалайзер. Только сейчас пришла идея делать через xsl...</title>
    <published>2010-10-07T10:19:17Z</published>
    <updated>2010-10-07T10:21:08Z</updated>
    <author>
      <name>anothar</name>
      <uri>https://stocksharp.ru/users/6089/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Нет, боже упаси это делать ручками. Да через сериалайзер. Только сейчас пришла идея делать через xslt-тогда можно все привести к базовому классу. но уже поздно-код написан, да медленная это вещь. и не говорите- изобрели блин да не тем местом, колеса вдруг стали квадратными. один способо как с этим побороться я знаю-создать новый класс, производный от Вашего и написать в моем классе метод преобразования к этому классу, мне он не нравится тем что мне еще придется плодить классы, может у Вас есть предложение как это реализовать без создания еще новых классов? Тут основная проблема в том, что я не смогу переопределить сериализацию у Ваших типов( ну или это будет весьма геморно), точнее у их полей.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/4115/</id>
    <title type="text"> почему Candle абстрактный, Потому что это базовый класс. Обычно под счетчками подрузомевают временн...</title>
    <published>2010-10-07T09:52:41Z</published>
    <updated>2010-10-07T09:52:41Z</updated>
    <author>
      <name>Mikhail Sukhov</name>
      <uri>https://stocksharp.ru/users/201/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Андрей Ефимов&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;почему Candle абстрактный,&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Потому что это базовый класс. Обычно под счетчками подрузомевают временные. Для них как раз есть проивзодный от Candle класс - TimeFrameCandle.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Андрей Ефимов&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;почему в itrader передаются не интерфейсы, а классы( например Candle а можно было сделать просто ICandle?).&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Там где нет реализации - использую интерфейсы. Там где есть - использую классы.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Андрей Ефимов&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Transaq Connector сделан по-дурацки он обменивается с программой неполноценными xml(зачем они эту ересь сделали не представляю-руки бы поотрывал тому кто это придумал).&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Товарщини изобрели веб сервис[biggrin] &lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Андрей Ефимов&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Поэтому я написал свои типы которые сериализуются и десериализуются.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ручками или какой-то спец механизм, аля XmlSerializer?&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Андрей Ефимов&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Встал вопрос совместимости с вашими типами. Унаследовать от Ваших классов не могу( мне же нужно сериализовать или десериализовать-а делаю это с помощью атрибутов). Были бы интерфейсы-никаких проблем. Эту проблему я конечно обойду-напишу преобразование типов. Но хочется чтобы пользователь имел доступ к дополнительным данным( ведь коннектор впринципе по некоторым полям передает больше значений).&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Расскажите по подробнее о механизме сериализации и как это работает в транзаке. Попробую предложить решение.&lt;br /&gt;&lt;br /&gt;&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Андрей Ефимов&lt;/span&gt;&lt;div class="innerquote"&gt;&lt;br /&gt;Тогда конкретная реализация зависела бы коннектора и могла учитывать какие-то его особенности или нести доп. поля.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Доп поля записываются через ExtensionInfo&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/4107/</id>
    <title type="text">Михаил, я начал писать реализацию iTrader для S#, точнее пока только написал вроппер вокруг их библи...</title>
    <published>2010-10-07T07:21:05Z</published>
    <updated>2010-10-07T07:21:05Z</updated>
    <author>
      <name>anothar</name>
      <uri>https://stocksharp.ru/users/6089/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Михаил, я начал писать реализацию iTrader для S#, точнее пока только написал вроппер вокруг их библиотеки. И возникли некоторые вопросы по поводу дизайна базовых типов, а именно:&lt;br /&gt;почему Candle абстрактный, почему в itrader передаются не интерфейсы, а классы( например Candle а можно было сделать просто ICandle?). Вопросы эти возникли по следующей причине:&lt;br /&gt;Transaq Connector сделан по-дурацки он обменивается с программой неполноценными xml(зачем они эту ересь сделали не представляю-руки бы поотрывал тому кто это придумал). Поэтому я написал свои типы которые сериализуются и десериализуются. Встал вопрос совместимости с вашими типами. Унаследовать от Ваших классов не могу( мне же нужно сериализовать или десериализовать-а делаю это с помощью атрибутов). Были бы интерфейсы-никаких проблем. Эту проблему я конечно обойду-напишу преобразование типов. Но хочется чтобы пользователь имел доступ к дополнительным данным( ведь коннектор впринципе по некоторым полям передает больше значений). Итого: предлагаю Вам рассмотреть возможность использования только интерфейсов в iTrader. Тогда конкретная реализация зависела бы коннектора и могла учитывать какие-то его особенности или нести доп. поля.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>