Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# для профСссионалов. Π’ΠΎΠΌ IIΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 13

Автор Π‘ΠΈΠΌΠΎΠ½ Робинсон

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();