﻿<?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-06-08T00:16:59Z</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">Спасибо, Михаил. Моих нервов не хватало. Выглядит проще обычной сериализации, потихоньку буду разбир...</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;p&gt;Спасибо, Михаил.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Моих нервов не хватало.&lt;/li&gt;
&lt;li&gt;Выглядит проще обычной сериализации, потихоньку буду разбираться. Буду в дальнейшем пользоваться Вашей библиотекой, но пока оставлю свой код, ибо негоже просто так переделывать код.&lt;/li&gt;
&lt;li&gt;Нет. Но после Вашего вопроса вспомнил, что пару раз я это замечал. Я всегда путаюсь с XmlSerializer, BinaryFormatter и SoapFormatter. Почему-то в книгах чаще упоминают последние два[biggrin]&lt;/li&gt;
&lt;/ol&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/4168/</id>
    <title type="text">Стандартная сериализация позволяет контролировать только весь процесс в целом, а не какое-то отдельн...</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">&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Стандартная сериализация позволяет контролировать только весь процесс в целом, а не какое-то отдельное поле. Да и реализовать интерфейс IXmlSerializable мягко говоря не для слабонервных.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;public class ErrorInfo
{
   [Field(&amp;quot;error&amp;quot;)]
   public string Info { get; set; }
}

var ser = new XmlSerializer&amp;lt;ErrorInfo&amp;gt;();
ser.Deserialize(s);
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Вы в курсе, что атрибут Serializable никаким образом не относится к XmlSerializer?&lt;/li&gt;
&lt;/ol&gt;
</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;blockquote&gt;
&lt;p&gt;На метаданных (атрибуты или xml). Отличается наличием конвертеров. Например, сложные типы (картинки, шифрованные строчки, сетевые адреса) в xml так просто не запихать. Приходится создавать структуру только для сериализации, где такие типы упакованы в примитивный формат (строка, число). Ecng.Serialization использует конвертеры на поля. Он превращает сложный тип в простой при сериализации и наоборот.
Вроде в стандартной сериализации можно реализовать свою сериализацию-то есть переопределить целиком. Но это как-то геморно. Я пробовал и не получилось, так что наверняка утверждать не буду.
И еще одно большое отличие - SerializatonItem. Это древовидная структура, которая содержит данные для записи в файл (или только то прочитанные из). Плюс в том, что эти данные можно потом передавать куда угодно. И записывать как угодно. Со стандартными сериализаторами такое не прокатит.
А это не аналог ли XmlDocument?
Вот пример из моего кода:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;
[Serializable]
    public class ErrorCallback:ServerCallback
    {
        private static XmlSerializer _serializer = new XmlSerializer(typeof(ErrorCallback));

        [XmlElement(&amp;quot;error&amp;quot;)]
        public String Error
        {
            get;
            set;
        }

        public static ErrorCallback FromXmlString(String s)
        {
            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
                +&amp;quot;&amp;lt;/ErrorCallback&amp;gt;&amp;quot;;
            using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(s)))
            {
                return (ErrorCallback)_serializer.Deserialize(stream);

            }
        }
    }

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Пока времени не было чтобы начать реализовать iTrader. Это пример прямо из кода использования стандартной десериализации для callback. для отправки команд я сериализую ручками( для десериализации бы это потребовало очень много времени). Вот пример xml ки которую должна парсить эта функция:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
&amp;lt;error&amp;gt;Описание ошибки&amp;lt;/error&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Напишите, пожалуйста, пример того как это будет выглядеть при Вашей десериализации.&lt;/p&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;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Андрей Ефимов:&lt;/strong&gt;
А можно поподробней. чем она отличается от стандартной? В стандартной можно контролировать названия полей с помощью атрибутов. На чем основана ваша собственная сериализация/десериализация?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;На метаданных (атрибуты или xml). Отличается наличием конвертеров. Например, сложные типы (картинки, шифрованные строчки, сетевые адреса) в xml так просто не запихать. Приходится создавать структуру только для сериализации, где такие типы упакованы в примитивный формат (строка, число). Ecng.Serialization использует конвертеры на поля. Он превращает сложный тип в простой при сериализации и наоборот.&lt;/p&gt;
&lt;p&gt;И еще одно большое отличие - SerializatonItem. Это древовидная структура, которая содержит данные для записи в файл (или только то прочитанные из). Плюс в том, что эти данные можно потом передавать куда угодно. И записывать как угодно. Со стандартными сериализаторами такое не прокатит.&lt;/p&gt;
&lt;p&gt;Пришлите мне какой-нить юз кейс из транзака и как Вы хотите его использовать с типом S#, а я вставлю код для работы через Ecng.Serialization.&lt;/p&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;blockquote&gt;
&lt;p&gt;Интересно, а что, там названия у нод и атрибутов любые могут быть?
Название полей и атрибутов можно контролировать с помощью XmlElement/XmlAttribute. нет названия у меня более понятные. Если поле уж совсем корявое то я обычно делаю нормальное поле. кот не сериализую/десериализую и ПолеAsString кот и сериализуется/десериализуется.
Согласен. Я использую свою сериализацию на основе Ecng.Serialization. Отличается от стандартной тем, что можно контролировать процесс сериализации.
А можно поподробней. чем она отличается от стандартной? В стандартной можно контролировать названия полей с помощью атрибутов. На чем основана ваша собственная сериализация/десериализация?
Так что для себя я решил. Создание нового трейдера начинается с тотальной обертки АПИ. И эта обертка никак не использует типы S#.
Если были бы интерфейсы, а не классы то в моем случае можно было бы создать и на основе интерфейсов S#. Впринципе добавить еще одно поле при стандартной десериализации несложно.&lt;/p&gt;
&lt;/blockquote&gt;
</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;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Андрей Ефимов:&lt;/strong&gt;
Нет, боже упаси это делать ручками. Да через сериалайзер.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Интересно, а что, там названия у нод и атрибутов любые могут быть? Или Вы поля у сущности назвали так же, как принято у Транзака? Если второе, то это не очень хорошо. Я раньше так же начинал с Квиком, делать десериализацию ДДЕ данных сразу в сущности. Потом такие траблы начались ввиде больших переделок на добавление нового поля.&lt;/p&gt;
&lt;p&gt;Так что для себя я решил. Создание нового трейдера начинается с тотальной обертки АПИ. И эта обертка никак не использует типы S#. А сам трейдер лишь делает конвертацию данных туда и обратно.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Андрей Ефимов:&lt;/strong&gt;
Тут основная проблема в том, что я не смогу переопределить сериализацию у Ваших типов( ну или это будет весьма геморно), точнее у их полей.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Согласен. Я использую свою сериализацию на основе Ecng.Serialization. Отличается от стандартной тем, что можно контролировать процесс сериализации.&lt;/p&gt;
</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">&lt;p&gt;Нет, боже упаси это делать ручками. Да через сериалайзер. Только сейчас пришла идея делать через xslt-тогда можно все привести к базовому классу. но уже поздно-код написан, да медленная это вещь. и не говорите- изобрели блин да не тем местом, колеса вдруг стали квадратными. один способо как с этим побороться я знаю-создать новый класс, производный от Вашего и написать в моем классе метод преобразования к этому классу, мне он не нравится тем что мне еще придется плодить классы, может у Вас есть предложение как это реализовать без создания еще новых классов? Тут основная проблема в том, что я не смогу переопределить сериализацию у Ваших типов( ну или это будет весьма геморно), точнее у их полей.&lt;/p&gt;
</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;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Андрей Ефимов:&lt;/strong&gt;
почему Candle абстрактный,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Потому что это базовый класс. Обычно под счетчками подрузомевают временные. Для них как раз есть проивзодный от Candle класс - TimeFrameCandle.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Андрей Ефимов:&lt;/strong&gt;
почему в itrader передаются не интерфейсы, а классы( например Candle а можно было сделать просто ICandle?).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Там где нет реализации - использую интерфейсы. Там где есть - использую классы.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Андрей Ефимов:&lt;/strong&gt;
Transaq Connector сделан по-дурацки он обменивается с программой неполноценными xml(зачем они эту ересь сделали не представляю-руки бы поотрывал тому кто это придумал).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Товарщини изобрели веб сервис[biggrin]&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Андрей Ефимов:&lt;/strong&gt;
Поэтому я написал свои типы которые сериализуются и десериализуются.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ручками или какой-то спец механизм, аля XmlSerializer?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Андрей Ефимов:&lt;/strong&gt;
Встал вопрос совместимости с вашими типами. Унаследовать от Ваших классов не могу( мне же нужно сериализовать или десериализовать-а делаю это с помощью атрибутов). Были бы интерфейсы-никаких проблем. Эту проблему я конечно обойду-напишу преобразование типов. Но хочется чтобы пользователь имел доступ к дополнительным данным( ведь коннектор впринципе по некоторым полям передает больше значений).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Расскажите по подробнее о механизме сериализации и как это работает в транзаке. Попробую предложить решение.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Андрей Ефимов:&lt;/strong&gt;
Тогда конкретная реализация зависела бы коннектора и могла учитывать какие-то его особенности или нести доп. поля.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Доп поля записываются через ExtensionInfo&lt;/p&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">&lt;p&gt;Михаил, я начал писать реализацию iTrader для S#, точнее пока только написал вроппер вокруг их библиотеки. И возникли некоторые вопросы по поводу дизайна базовых типов, а именно:
почему Candle абстрактный, почему в itrader передаются не интерфейсы, а классы( например Candle а можно было сделать просто ICandle?). Вопросы эти возникли по следующей причине:
Transaq Connector сделан по-дурацки он обменивается с программой неполноценными xml(зачем они эту ересь сделали не представляю-руки бы поотрывал тому кто это придумал). Поэтому я написал свои типы которые сериализуются и десериализуются. Встал вопрос совместимости с вашими типами. Унаследовать от Ваших классов не могу( мне же нужно сериализовать или десериализовать-а делаю это с помощью атрибутов). Были бы интерфейсы-никаких проблем. Эту проблему я конечно обойду-напишу преобразование типов. Но хочется чтобы пользователь имел доступ к дополнительным данным( ведь коннектор впринципе по некоторым полям передает больше значений). Итого: предлагаю Вам рассмотреть возможность использования только интерфейсов в iTrader. Тогда конкретная реализация зависела бы коннектора и могла учитывать какие-то его особенности или нести доп. поля.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>