【C#B站从入门】委托、XML和播放器项目

01单例模式

  1. 将构造函数私有化
  2. 在再次点击的时候,因为判断出不是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文档

  1. 可扩展的标记语言
  2. 作用:小型的数据库,用来存储数据
  3. 在后台应用程序 ——> 项目 ——>右键点击添加新建项 ——> XML文件
  4. 注意:
  • XML是严格区分大小写的
  • 标签也是成对出现的
  1. Node:节点:一个个标签是节点
  2. Element:元素:在XML文档中看到的所以内容都是元素
  3. XML元素必须要有根节点,而且只能有一个
  4. .IntText与 .IntXml 的区别
  • .IntText = “<-p->我是一个p标签<-/p->” ,会处理成转义字符
  • IntXml = “<-p->我是一个p标签<-/p->” ,会添加一个下级标签效果 (“-”是为了使富文本效果失效,多余的)
    在这里插入图片描述
            //通过代码来创建XML文档
            //1.引用命名空间 System.Xml
            //2.创建XML文档对象
            XmlDocument doc = new XmlDocument();
            //3.创建第一行描述信息,并且添加到doc文档中
            XmlDeclaration declation = doc.CreateXmlDeclaration("1.0","UTF-8",null);
            doc.AppendChild(declation);
            //4.创建根节点
            XmlElement books = doc.CreateElement("Books");
            //将根节点添加到文档当中
            doc.AppendChild(books);
            //5.给根节点创建子节点Book
            XmlElement book1 = doc.CreateElement("Book");
            books.AppendChild(book1);
            //6.给节点Book创建子节点
            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);
            //6.给节点Book创建子节点
            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追加

  1. 有这个文件还是没有这个文件,要做的事都是往根节点内添加子节点
            XmlElement books;
            //追加XML文档
            XmlDocument doc = new XmlDocument();
            //存在两种情况
            if (File.Exists("Books.xml"))
            {
                //如果文件存在 加载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);
            //6.给节点Book创建子节点
            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();
            //加载要读取的XML
            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");
//获取路径上的节点,属性在Item中
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委托语法

  1. 为什么要使用委托
  • 将一个方法作为参数传递给另一个方法
  1. 委托概念
  • 声明一个委托类型 ,声明在类外,命名空间内
    -public Delegate void DelSayHi(string name); //返回值和参数与方法相同
  • 委托所指向的函数必须跟委托具有相同的签名(签名:参数、返回值)
//声明一个委托指向一个函数
    public delegate void DelSayHi(string name);
    class Program
    {
        static void Main(string[] args)
        {
            //方法1
            //DelSayHi dl = new DelSayHi(SayHiChiese);
            //dl("张三");
            //方法2
            //DelSayHi dl = SayHiChiese;
            //dl("张三");
            //方法3
            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);
        }
    }
  1. 匿名函数
  2. 练习:使用委托求数组的最大值
  3. 练习:使用委托求任意数组的最大值
  4. 范式委托
  5. 多播委托
  6. Lambda表达式
  7. 使用委托来实现窗体传值

08匿名函数

  1. 本质上还是函数,当方法只调用一次的时候可以考虑使用匿名函数
  2. 就是没有函数名的意思
    //声明一个委托指向一个函数
    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,delegate(object o1,object o2)
            //{
            //    string s1 = (string)o1;
            //    string s2 = (string)o2;
            //    return s1.Length - s2.Length;
            //});
            //使用Lamda表达式
            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;
        }
    }
  1. 泛型委托
    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 = () => { };//delegate () { };
            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多播委托

  1. 委托不止指向一个函数,可以指向多个函数
    //声明一个委托指向一个函数
    delegate void GetDel1();
    class Program
    {
        static void Main(string[] args)
        {
            GetDel1 del = T1;
            del += T2;
            del += T3;
            del -= T2;
            //del = t3;  //最后只剩下T3;
            Console.ReadKey();
        }
        public static void T1() 
        {
            Console.WriteLine("我是T1");
        }
        public static void T2() 
        {
            Console.WriteLine("我是T2");
        }
        public static void T3() 
        {
            Console.WriteLine("我是T3");
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
视频XML播放源码 三层结构之下的文章视频管理系统 对以前的视频XML进行更行,增加了简单视频列表和列表视频管理及部署服务器上FLV不能播放等问题. 视频XML播放可以更快的查看视频 index.htm是视频播放页面 对应的XMLXML文件夹中player.xml 采用VS2008+SQ2005 default.aspx是带列表的视频播放页 目录下的list1.xml 后台功能更新 后台添加admin 密码admin 网常规管理: 基本设置 管理设置 简单视频列表: 简单视频进行管理 添加简单视频功能 列表视频功能管理: 添加列表视频 修改视频(这个传值过去绑定XML节点有点问题,待解决) 删除视频 栏目分类管理: 大类添加 小类添加 大类列表 小类列表 内容管理: 文章管理 文章添加 解决问题: 国内大多都是Win2003的主机,FLV格式文件上传服务器后不能播放,默认是没有指定输出FLV这种格式的虽然FTP里面可以看见,但无法通过http访问,也就无法播放了。 让IIS支持Flv的详细设置方法: IIS-->网--->属性--->HTTP性能--->MIME类型--->新建: 扩展名:flv MIME类型:flv-application/octet-stream (我用这个方法就可以正常播放了……) 你必须设置一下内容 1:在“Web服务扩展”中Active Server Pages,Internet 数据连接器,RPC代理服务扩展,以及在服务器端的包含文件都必须置为允许状况 2:“网”-》属性-》主目录-》配置-》选项-》启动父路径 3:“网”-》属性-》服务-》在隔离模式中选中“以IIS5.0隔离模式运行WWW服务” 4:开始-》程序-》管理工具-》服务.找到RPC服务,双击-》登录-》允许服务与桌面交互 原来是net默认上传限制是4M, 超过则要在web.config中配置: 需要在web.config 就可以解决

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值