01单例模式
- 将构造函数私有化
- 在再次点击的时候,因为判断出不是null,所以直接将刚才建立好的对象返回,不管点记下都返回同一个对象
public static class Form2 : Form
{
public static Form2 FrmSingle = null;
private Form2()
{
InitializeComponent();
}
public static Form2 GetSingle()
{
if(FrmSingle == null)
{
FrmSingle = new Form2();
}
return FrmSingle;
}
}
02创建XML文档
- 可扩展的标记语言
- 作用:小型的数据库,用来存储数据
- 在后台应用程序 ——> 项目 ——>右键点击添加新建项 ——> XML文件
- 注意:
- Node:节点:一个个标签是节点
- Element:元素:在XML文档中看到的所以内容都是元素
- XML元素必须要有根节点,而且只能有一个
- .IntText与 .IntXml 的区别
- .IntText = “<-p->我是一个p标签<-/p->” ,会处理成转义字符
- IntXml = “<-p->我是一个p标签<-/p->” ,会添加一个下级标签效果 (“-”是为了使富文本效果失效,多余的)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9f3c06a3c4314cbe89357556dc421277.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6I2S6YeO5Y-J54On6aWt,size_18,color_FFFFFF,t_70,g_se,x_16#pic_center)
XmlDocument doc = new XmlDocument();
XmlDeclaration declation = doc.CreateXmlDeclaration("1.0","UTF-8",null);
doc.AppendChild(declation);
XmlElement books = doc.CreateElement("Books");
doc.AppendChild(books);
XmlElement book1 = doc.CreateElement("Book");
books.AppendChild(book1);
XmlElement name1 = doc.CreateElement("Name");
name1.InnerText = "西游记";
book1.AppendChild(name1);
XmlElement price1 = doc.CreateElement("Price");
price1.InnerText = "30";
book1.AppendChild(price1);
XmlElement dec1 = doc.CreateElement("dec");
dec1.InnerText = "猴子修仙的故事";
book1.AppendChild(dec1);
XmlElement book2 = doc.CreateElement("Book");
books.AppendChild(book2);
XmlElement name2 = doc.CreateElement("Name");
name1.InnerText = "西游记";
book1.AppendChild(name2);
XmlElement price2 = doc.CreateElement("Price");
price1.InnerText = "30";
book1.AppendChild(price2);
XmlElement dec2 = doc.CreateElement("dec");
dec1.InnerText = "猴子修仙的故事";
book1.AppendChild(dec2);
XmlElement bookItem1 = doc.CreateElement("BookItem");
bookItem1.SetAttribute("Mide","中国");
bookItem1.SetAttribute("Count","100");
book1.AppendChild(bookItem1);
doc.Save("Books.xml");
Console.WriteLine("保存成功");
Console.ReadKey();
03向XML追加
- 有这个文件还是没有这个文件,要做的事都是往根节点内添加子节点
XmlElement books;
XmlDocument doc = new XmlDocument();
if (File.Exists("Books.xml"))
{
doc.Load("Books.xml");
books = doc.DocumentElement;
}
else
{
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0","utf-8",null);
doc.AppendChild(dec);
books = doc.CreateElement("Books");
doc.AppendChild(books);
}
XmlElement book1 = doc.CreateElement("Book");
books.AppendChild(book1);
XmlElement name1 = doc.CreateElement("Name");
name1.InnerText = "西游记";
book1.AppendChild(name1);
XmlElement price1 = doc.CreateElement("Price");
price1.InnerText = "30";
book1.AppendChild(price1);
XmlElement dec1 = doc.CreateElement("dec");
dec1.InnerText = "猴子修仙的故事";
book1.AppendChild(dec1);
doc.Save("Books.xml");
Console.WriteLine("保存成功");
Console.ReadKey();
04读取XML文档
XmlDocument doc = new XmlDocument();
doc.Load("Books.xml");
XmlElement books = doc.DocumentElement;
XmlNodeList xnl = books.ChildNodes;
foreach (XmlNode item in xnl)
{
Console.WriteLine(item.InnerText);
}
Console.ReadKey();
05读取带属性的XML文档
XmlDocument doc = new XmlDDocument();
doc.Load("Order.xml");
XmlNodeList xnl = doc.SelectNodes("/Order/Items/OrderItem");
foreach(XmlNode node in xnl)
{
Console,WriteLine(node.Attributes["Name"].Value);
Console.WriteLine(node.Attributes["Count"],Value);
}
Console.ReadKey();
06删除节点
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
doc.Load("Order.xml");
XmlNode xn = doc.SelectSingleNode("/Order/Items");
xn.RemoveAll();
doc.Save("Order.xml");
Console.WriteLine("删除成功!");
Console.ReadKey();
07委托语法
- 为什么要使用委托
- 委托概念
- 声明一个委托类型 ,声明在类外,命名空间内
-public Delegate void DelSayHi(string name); //返回值和参数与方法相同 - 委托所指向的函数必须跟委托具有相同的签名(签名:参数、返回值)
public delegate void DelSayHi(string name);
class Program
{
static void Main(string[] args)
{
Test("张三",SayHiEnglish);
Console.ReadKey();
}
public static void Test(string name,DelSayHi dl)
{
dl(name);
}
public static void SayHiChiese(string name)
{
Console.WriteLine("您吃了嘛"+name);
}
public static void SayHiEnglish(string name)
{
Console.WriteLine("Nice to meet you"+name);
}
}
- 匿名函数
- 练习:使用委托求数组的最大值
- 练习:使用委托求任意数组的最大值
- 范式委托
- 多播委托
- Lambda表达式
- 使用委托来实现窗体传值
08匿名函数
- 本质上还是函数,当方法只调用一次的时候可以考虑使用匿名函数
- 就是没有函数名的意思
delegate string DelGet(string name);
class Program
{
static void Main(string[] args)
{
string[] str = { "aBdF", "ESsserq" };
GetNewNames(str, delegate (string name)
{
return name.ToLower();
});
for (int i = 0; i < str.Length; i++)
{
Console.WriteLine(str[i]);
}
Console.ReadKey();
}
public static void GetNewNames(string[] str, DelGet dl)
{
for (int i = 0; i < str.Length; i++)
{
str[i] = dl(str[i]);
}
}
}
static void Main(string[] args)
{
DelGet dl = delegate (string name)
{
Console.WriteLine("你好,我叫"+name);
};
dl("张三");
Console.ReadKey();
}
09泛型委托
delegate int DelGet(object o1, object o2);
class Program
{
static void Main(string[] args)
{
string[] str = { "sdsdasd", "sdsafd", "qwerew" };
object max = GetMax(str, (object o1, object o2) => { string s1 = (string)o1; string s2 = (string)o2; return s1.Length - s2.Length; });
Console.WriteLine(max);
Console.ReadKey();
}
public static object GetMax(object[] obj, DelGet del)
{
object max = obj[0];
for (int i = 0; i < obj.Length; i++)
{
if (del(max, obj[i]) < 0)
{
max = obj[i];
}
}
return max;
}
}
- 泛型委托
delegate int DelGet<T>(T o1, T o2);
class Program
{
static void Main(string[] args)
{
string[] str = { "sdsdasd", "sdsafd", "qwerew" };
string max1 = GetMax<string>(str, delegate (string s1, string s2)
{
return s1.Length - s2.Length;
});
int[] nums = { 1, 2, 3, 4, 5 };
int max2 = GetMax<int>(nums, delegate (int num1, int num2)
{
return num1 - num2;
});
Console.WriteLine(max1);
Console.WriteLine(max2);
Console.ReadKey();
}
public static T GetMax<T>(T[] obj, DelGet<T> del)
{
T max = obj[0];
for (int i = 0; i < obj.Length; i++)
{
if (del(max, obj[i]) < 0)
{
max = obj[i];
}
}
return max;
}
}
10Lamda表达式
delegate void GetDel1();
delegate void GetDel2(string name);
delegate string GetDel3(string name);
class Program
{
static void Main(string[] args)
{
GetDel1 del1 = () => { };
GetDel2 del2 = (string name) => { };
GetDel3 del3 = (string name) => { return name; };
List<int> list = new List<int>() { 1,2,3,4,5,6,7,8};
list.RemoveAll(n => n>5);
foreach (var item in list)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
11窗体传值
在这里插入代码片
12多播委托
- 委托不止指向一个函数,可以指向多个函数
delegate void GetDel1();
class Program
{
static void Main(string[] args)
{
GetDel1 del = T1;
del += T2;
del += T3;
del -= T2;
Console.ReadKey();
}
public static void T1()
{
Console.WriteLine("我是T1");
}
public static void T2()
{
Console.WriteLine("我是T2");
}
public static void T3()
{
Console.WriteLine("我是T3");
}
}