MyBooks.club
Все категории

Симон Робинсон - C# для профессионалов. Том II

На сайте mybooks.club вы можете бесплатно читать книги онлайн без регистрации, включая Симон Робинсон - C# для профессионалов. Том II. Жанр: Программирование издательство -,. Доступна полная версия книги с кратким содержанием для предварительного ознакомления, аннотацией (предисловием), рецензиями от других читателей и их экспертным мнением.
Кроме того, на сайте mybooks.club вы найдете множество новинок, которые стоит прочитать.

Название:
C# для профессионалов. Том II
Издательство:
-
ISBN:
-
Год:
-
Дата добавления:
17 сентябрь 2019
Количество просмотров:
319
Читать онлайн
Симон Робинсон - C# для профессионалов. Том II

Симон Робинсон - C# для профессионалов. Том II краткое содержание

Симон Робинсон - C# для профессионалов. Том II - описание и краткое содержание, автор Симон Робинсон, читайте бесплатно онлайн на сайте электронной библиотеки mybooks.club
C# для профессионаловПлатформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.Основные темы книги• Все особенности языка C#• C# и объектно-ориентированное программирование• Приложения и службы Windows• Создание web-страниц и web-служб с помощью ASP NET• Сборки .NET• Доступ к данным при помощи ADO NET• Создание распределённых приложений с помощью NET Remoting• Интеграция с COM, COM+ и службой Active Directory

C# для профессионалов. Том II читать онлайн бесплатно

C# для профессионалов. Том II - читать книгу онлайн бесплатно, автор Симон Робинсон

private void button2_Click(object sender, System.EventArgs e) {

 // создаем ссылку на тип Products Products newPd;

 // новый файловый поток для открытия сериализованного объекта

 FileStream f=new FileStream("..\..\..\serialprod.xml", FileMode.Open);

Здесь создается новый объект XmlSerializer, таким образом передается информация о типе Product. Затем можно вызвать метод Deserialize. Отметим, что нам по-прежнему необходимо делать явное преобразование типа, когда создается объект newPd. В этом месте newPd имеет такое же состояние, как и pd:

 // новый Serializer

 XmlSerializer newSr=new XmlSerializer(typeof(Products));

 // десериализация объекта

 newPd=(Products)newSr.Deserialize(f);

 // загружаем его в окно списка.

 listBox1.Items.Add(newPd.ProductName);

 f.Closed();

}

Теперь мы проверим класс Products. Единственное различие между ним и любым другим классом, который можно записать, состоит в добавленных атрибутах. Не путайте эти атрибуты с атрибутами в документе XML. Эти атрибуты расширяют класс SystemAttribute. Атрибут является некоторой декларативной информацией, которая может извлекаться во время выполнения с помощью CLR (см. в главе 6 более подробно). В данном случае добавляются атрибуты, которые описывают, как объект должен быть сериализован:

//класс, который будет сериализован,

//атрибуты определяют, как объект сериализуется.

[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]

public class Products {

 [System.Xml.Serialization.XmlElementAttribute(IsNullable=false)]

 public int ProductID;

 [System.Xml.Serialization.XmlElementAttribute(IsNullable=false)]

 public string ProductName;

 [System.Xml.Serialization.XmlElementAttribute()]

 public int SupplierID;

 [System.Xml.Serialization.XmlElementAttribute()]

 public int CategoryID;

 [System.Xml.Serialization.XmlElementAttribute()]

 public string QuantityPerUnit;

 [System.Xml.Serialization.XmlElementAttribute()]

 public System.Decimal UnitPrice;

 [System.Xml.Serialization.XmlElementAttribute()]

 public short UnitsInStock;

 [System.Xml.Serialization.XmlElementAttribute()]

 public short UnitsOnOrder;

 [System.Xml.Serialization.XmlElementAttribute()]

 public short ReorderLevel;

 [System.Xml.Serialization.XmlElementAttribute()]

 public bool Discontinued;

}

Созданный документ XML выглядит, как любой другой документ XML, который мы могли бы создать.

<?xml version="1.0" ?>

<Products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 <ProductID>200</ProductID>

 <ProductName>Serialize Objects</ProductName>

 <SupplierID>1</SupplierID>

 <CategoryID>100</CategoryID>

 <QuantityPerUnit>6</QuantityPerUnit>

 <UnitPrice>1000</UnitPrice>

 <UnitsInStock>10</UnitsInStock>

 <UnitsOnOrder>0</UnitsOnOrder>

 <ReorderLevel>1</ReorderLevel>

 <Discontinued>false</Discontinued>

</Products>

Здесь нет ничего необычного. Мы могли бы выполнить преобразование документа XML и вывести его как HTML, загрузить его в DataSet с помощью ADO.NET, загрузить с его помощью XmlDocument, как в примере, десериализовать его и создать объект в том же состоянии, которое имел pd перед своей сериализацией (что соответствует событию второй кнопки).

Рассмотренный только что пример является очень простым. Обычно имеется ряд методов получения (get) и задания (set) свойств для работы с данными в объекте. Но что, если объект состоит из двух других объектов, или выводится из базового класса, из которого следуют и другие классы?

Такие ситуации обрабатываются с помощью класса XmlSerializer. Давайте усложним пример (находится в SerialSample2). Для большей реалистичности сделаем каждое свойство доступным через методы get и set:

private void button1_Click(object sender, System.EventArgs e) {

 // новый объект products

 Products pd=new Products();

 // задать некоторые свойства

 pd.ProductID=200;

 pd.CategoryID=100;

 pd.Discontinued=false;

 pd.ProductName="Serialize Objects";

 pd.QuantityPerUnit="6";

 pd.ReorderLevel=1;

 pd.SupplierID=1;

 pd.UnitPrice=1000;

 pd.UnitsInStock=10;

 pd.UnitsOnOrder= 0;

 pd.Discount=2;

 //новые TextWriter и XmlSerializer

 TextWriter tr=new StreamWriter("..\..\..\serialprod1.xml");

 XmlSerializer sr=new XmlSerializer(typeof(Products));

 // сериализируем объект

 sr.Serialize(tr, pd);

 tr.Close();

}


private void button2_Click(object sender, System.EventArgs e) {

 //создать ссылку на тип Products

 Products newPd;

 // новый файловый поток для открытия сериализуемого объекта

 FileStream f=new FileStream("..\..\..\serialprod1.xml", FileMode.Open);

 // новый сериализатор

 XmlSerializer newSr=new XmlSerializer(typeof(Products));

 //десериализуем объект

 newPd=(Products)newSr.Deserialize(f);

 //загрузить его в окно списка.

 listBox1.Items.Add(newPd.ProductName);

 f.Close();

}


//класс, который будет сериализован.

//атрибуты определяют, как объект сериализуется

[System.Xml.Serialization.XmlRootAttribute()]

public class Products {

 private int prodId;

 private string prodName;

 private int suppId;

 private int catId;

 private string qtyPerUnit;

 private Decimal unitPrice;

 private short unitsInStock;

 private short unitsOnOrder;

 private short reorderLvl;

 private bool discont;

 private int disc;

 // добавлен атрибут Discount

 [XmlAttributeAttribute(AttributeName="Discount")]

 public int Discount {

  get {return disc;}

  set {disc=value;}

 }

 [XmlElementAttribute()]

 public int ProductID {

  get {return prodId;}

  set {prodId=value;}

 }

 [XmlElementAttribute()]

 public string ProductName {

  get {return prodName;}

  set {prodName=value;}

 }

 [XmlElementAttribute()]

 public int SupplierID {

  get {return suppId;}

  set {suppId=value;}

 }

 [XmlElementAttribute()]

 public int CategoryID {

  get {return catId;}

  set {catId=value;}

 }

 [XmlElementAttribute()]

 public string QuantityPerUnit {

  get {return qtyPerUnit;}

  set {qtyPerUnit=value;}

 }

 [XmlElementAttribute()]

 public Decimal UnitPrice {

  get {return UnitPrice;}

  set {unitPrice=value;}

 }

 [XmlElementAttribute()]

 public short UnitsInStock {

  get {return unitsInStock;}

  set {unitsInStock=value;}

 }

 [XmlElementAttribute()]

 public short UnitsOnOrder {

  get {return unitsOrOrder;}

  set {unitsOnOrder=value;}

 }

 [XmlElementAttribute()]

 public short ReorderLevel {

  get {return reorderLvl;}

  set {reorderLvl=value;}

 }

 [XmlElementAttribute()]

 public pool Discontinued {

  get {return discont;}

  set {discont=value;}

 }

}

Выполнение этого кода вместо класса Products в предыдущем примере даст те же самые результаты с одним исключением. Мы добавили атрибут Discount, тем самым показав, что атрибуты также могут быть сериализуемыми. Вывод выглядит следующим образом (serialprod1.xml):

<?xml version="1.0" encoding="utf-8"?>

<Products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Discount="2">

 <ProductID>200</ProductID>

 <ProductName>Serialize Objects</ProductName>

 <SupplierID>1</SupplierID>

 <CategoryID>100</CategoryID>

 <QuantityPerUnit>6</QuantityPerUnit>

 <UnitPrice>1000</UnitPrice>

 <UnitsInStock>10</UnitsInStock>

 <UnitsOnOrder>0</UnitsOnOrder>

 <ReorderLevel>1</ReorderLevel>

 <Discontinued>false</Discontinued>

</Products>

Отметим атрибут Discount элемента Products. Поэтому теперь, когда определены средства задания и получения свойств, можно добавить более сложную проверку кода в свойствах.

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

В событии button1_Click создается новый объект на основе Product и новый объект на основе BookProduct (newProd и newBook). Мы добавляем данные в различные свойства каждого объекта и помещаем объекты в массив на основе Product. Затем создается новый объект на основе Inventory, которому в качестве параметра передается массив. Затем можно сериализовать объект Inventory, чтобы впоследствии его восстановить:

private void button1_Click(object sender, System.EventArgs e) {

 // создать новые объекты книги и книжной продукции

 Product newProd=new Product();

 BookProduct newBook=new BookProduct();


Симон Робинсон читать все книги автора по порядку

Симон Робинсон - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки mybooks.club.


C# для профессионалов. Том II отзывы

Отзывы читателей о книге C# для профессионалов. Том II, автор: Симон Робинсон. Читайте комментарии и мнения людей о произведении.

Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*
Все материалы на сайте размещаются его пользователями.
Администратор сайта не несёт ответственности за действия пользователей сайта..
Вы можете направить вашу жалобу на почту librarybook.ru@gmail.com или заполнить форму обратной связи.