一、索引器
二、单例模式:只能创建一个对象的类
语法实现步骤:
1、将构造函数私有化,private;
private Form2()
{
InitializeComponent();
}
2、类内部创建一个静态该类对象的单例,初值为null;
public static Form2 frmSingle = null;
3、创建一个静态方法,判断单例是否为null,如是,新建一个对象并赋值给单例,返回该单例
public static Form2 GetSingle()
{
if (frmSingle == null)
{
frmSingle = new Form2();
}
return frmSingle;
}
最后调用此类的静态方法即可取得此单例
orm2 frm2 = Form2.GetSingle(); //new Form2();
frm2.Show();
三、XML :Extensible Markup Language 可扩展标记语言
HTML(超级文本标记语言)是用来显示数据的,而XML(可扩展标记语言)是用来存储数据的,小型数据库
特点:标签不固定,可以自由发挥;
与HTML一样标签也是成对出现,但是严格区分大小写,必须有一个并且只能有一个根节点
1、通过新建XML文件,手写进去:
<?xml version="1.0" encoding="utf-8" ?>
<Books>
<Book>
<Name>冰与火之歌</Name>
<Price>10</Price>
<Des>权利的游戏</Des>
</Book>
<Book>
<Name>三国演义</Name>
<Price>50</Price>
<Des>三国鼎立</Des>
</Book>
</Books>
2、通过代码创建XML文档
1)引入命名空间:---using System.Xml;
2)创建XML文档对象
XmlDocument doc = new XmlDocument();
3)添加第一行描述信息
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(dec);
4)添加根节点
XmlElement books = doc.CreateElement("Books");
doc.AppendChild(books);
5)给根节点添加子节点
XmlElement book1 = doc.CreateElement("Book");
books.AppendChild(book1);
XmlElement book2 = doc.CreateElement("Book");
books.AppendChild(book2);
6)给子节点添加信息节点
XmlElement name1 = doc.CreateElement("Name");
name1.InnerText = "冰与火之歌";
book1.AppendChild(name1);
XmlElement price1 = doc.CreateElement("Price");
price1.InnerText = "10";
book1.AppendChild(price1);
XmlElement des1 = doc.CreateElement("Des");
des1.InnerText = "权利的游戏";
book1.AppendChild(des1);
XmlElement name2 = doc.CreateElement("Name");
name2.InnerText = "三国演义";
book2.AppendChild(name2);
XmlElement price2 = doc.CreateElement("Price");
price2.InnerText = "50";
book2.AppendChild(price2);
XmlElement des2 = doc.CreateElement("Des");
des2.InnerText = "三国鼎立";
book2.AppendChild(des2);
7)保存XML文档
doc.Save("Books.xml");
8)带属性的XML
XmlElement orderItem1 = doc.CreateElement("OrderItem"); //子节点1
//给节点添加属性
orderItem1.SetAttribute("Name", "码表");
orderItem1.SetAttribute("Count", "40");
item.AppendChild(orderItem1);
9)添加内容时有两种,当需要添加标签时用
name.InnerXml = "<p>我是一个p标签</p>";
当只是存文本内容时,最好用 Text
number.InnerText = "我是一个p标签";
3、追加XML
也是要先引入命名空间,创建XML文档对象,然后开始判断是否存在要追加的文件
if(File.Exists("Books.xml"))
声明一个根节点:XmlElement books;
1)如果存在:
加载文档,并获取XML文档的根节点
//如存在,加载该文档
doc.Load("Books.xml");
//获取文档的根节点
books = doc.DocumentElement;
然后在根节点中追加子节点
2)如不存在,添加第一行描述信息,添加根节点,与创建XML文档相同
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.AppendChild(dec);
books = doc.CreateElement("Books");
doc.AppendChild(books);
3)判断完成后,将要追加的内容追加到根节点中
同创建XML中的添加子节点
4、读取XML
1)也是要创建一个XML对象,加载要读取的XML,然后获取根节点
XmlDocument doc = new XmlDocument();
//加载要读取的xml文档
doc.Load("Books.xml");
//获取XML的根节点
XmlElement books = doc.DocumentElement;
2)然后根据根节点获取所有子节点,返回一个节点列表集合
XmlNodeList xnl = books.ChildNodes;
3)遍历集合就能得到每一项节点的值
foreach (XmlNode item in xnl)
{
Console.WriteLine(item.InnerText);
}
5、读取带属性的XML
1)同以上加载XML
2)获得某一节点下的所有子节点列表结合
XmlNodeList xnl = doc.SelectNodes("/Order/Items/OrderItem"); //获得某一个节点下所包含的所有子节点
3)遍历集合,得到每一个子节点中的属性
foreach (XmlNode node in xnl)
{
Console.WriteLine(node.Attributes["Name"].Value);
Console.WriteLine(node.Attributes["Count"].Value);
}
4) 可以改变属性的值:
//获取该节点
XmlNode xn = doc.SelectSingleNode("/Order/Items/OrderItem[@Name='码农']");
xn.Attributes["Name"].Value = "改变后的Name"; //改变该节点Name属性的值
xn.Attributes["Count"].Value = "100"; //改变该节点Count属性的值
doc.Save("Order.xml"); //重新保存XML文档
6、删除XML中的节点
1、同上加载要删除的XML
2、获得要删除的节点的父节点
XmlNode xn = doc.SelectSingleNode("/Order/Items"); //获取要删除的节点的父节点
3、删除此节点下的所有节点:
xn.RemoveAll();
然后重新保存即可