亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

4、C#進階:MD5加密、進程、線程、GDI+、XML、委托

2019-11-14 14:13:21
字體:
來源:轉載
供稿:網友

md5加密

將字符串進行加密,無法解密。網上的解密方式也都是在庫里找,找不到也沒有。

 1 PRotected void Page_Load(object sender, EventArgs e) 2 { 3     string s = "123"; 4     Response.Write(getMd5(s)); 5 } 6 public string getMd5(string str) 7 { 8     MD5 md5 = MD5.Create();//MD5抽象類無法實例化 實例化該方法 9     byte[] buffer = Encoding.Default.GetBytes(str); //將字符串轉換為字節數組10     byte[] mdbuffer = md5.ComputeHash(buffer); //調用ComputeHash方法把數組傳進去11     //將字節數組中每個元素ToString();12     StringBuilder result = new StringBuilder();13     for (int i = 0; i < mdbuffer.Length; i++)14     {15         result.Append(mdbuffer[i].ToString("x2")); //ToString得到十進制字符串 ToString("x")十六進制字符串 ToString("x2")對齊16     }17     return result.ToString();18 }

進制

表示某一位置上的數運算時是逢X進一位。二進制就是逢二進一, 十進制是逢十進一,十六進制是逢十六進一,以此類推.

so:二進制001010101只有0和1計算機中的數據都是二進制表示,四進制以0、1、2、3四個數字表示任何實數。十進制0~9數字組成,十六進制0~9以及ABCEDF組成(表示十進制數)10~15

ToString的特殊方法

時間:now.ToString("yyyy-MM-dd hh:mm:ss") 年-月-日 時:分:秒 具體可以自定單獨寫f y m d t 意義不同前者都可實現

字符型轉換:int.ToString("n"); 640,000.00; int.ToString("C"); ¥640,000.00; .ToString("x");16進制

Directory類

用來操作文件夾的

 1 Directory.CreateDirectory("d:/ccc/cc"); //創建文件夾 2  3 Directory.Delete("d:/ccc",true); //true刪除非空文件夾 4  5 Directory.Move(@"d:/ccc", @"d:/cccc"); //剪切操作 源目錄沒了 必須同一卷軸d盤 6  7 string[] s = Directory.GetFiles(@"D:/項目/Web/Images/shiji"); //獲得文件夾目錄下所有文件全路徑 8  9 string[] s = Directory.GetFiles(@"D:/項目/Web/Images/shiji","*.jpg"); //獲得文件夾目錄下指定后綴名文件全路徑10 11 string[] s = Directory.GetDirectories(@"D:/項目/Web/Images"); //獲得文件夾目錄下的文件夾的全路徑12 13 Directory.Exists(@"D:/項目/Web/Images") //是否存在某文件夾

進程

我們可以把計算機中每一個運行的應用程序當作是一個進程

 1 ///獲得當前程序中正在運行的進程 2 Process[] pros = Process.GetProcesses(); 3 foreach (var item in pros) 4 {
    //item.Kill(); //關閉所有進程.
    //item.ProcessName; //進程名
5 Console.Write(item.ToString()); 6 } 7 //通過進程打開一些程序 8 Process.Start("calc"); //打開計算器 9 Process.Start("notepad"); //打開記事本10 //打開指定文件11 ProcessStartInfo pro = new ProcessStartInfo(@"d:/11.txt");12 Process pr = new Process();13 pr.StartInfo = pro;14 pr.Start();

線程

每一個進程是由多個線程組成的。

單線程:讓程序做多件事時,會引發卡死 假死狀態。

多線程:讓一個程序同時處理多個事情,后臺運行程序,提高程序的運行效率。

前臺線程:只有所有的前臺線程都關閉才能完成程序關閉。(winform多窗口時)

后臺線程:只要所有的前臺線程結束,后臺線程自動結束。

 1 //實例化Thread類,并傳入一個指向線程所要運行的方法。(這時線程已經產生,但還沒有運行) 2 //調用Thread類的Start方法,標記線程可以被CPU執行了,但具體執行事件由CPU決定。 3 Thread th = new Thread(Test); //創建一個線程去執行這個方法。 4 th.IsBackground = true; //將線程設置為后臺線程,前臺關閉后 線程結束。 5 th.Start(); //標記準備就緒,可以隨意被執行,具體什么時候執行由CPU決定。 6 //在.net下是不允許跨線程訪問的。 7 //有時候需要手動釋放線程 關閉時 判斷線程是否關閉  8 if (th != null) 9 {10     th.Abort(); //結束這個線程 不能再Start()11 }12 Thread.Sleep(3000); //睡眠3秒后執行13 //線程執行帶參數方法14 Thread.Start("123"); object類型參數 在start后括號寫參數

多用于大量數據時,多分一個線程去搜索數據,然后存儲到緩存里,頁面再用異步獲取緩存中的數據。

GDI+

是一種繪圖裝置接口,可以用來繪制圖片。

畫直線

Graphics g = this.CreateGraphics(); //創建GDI對象Pen pen = new Pen(Brushes.Yellow); //創建畫筆Point p1 = new Point(30, 50); //創建兩個點Point p2 = new Point(250, 250);g.DrawLine(pen, p1, p2);

驗證碼

 1 /// <summary> 2 /// 字符 3 /// </summary> 4 /// <param name="len">幾位</param> 5 /// <returns></returns> 6 public static string validation(int cd) 7 { 8     var ran = new Random(); 9     int num, tem;10     string rtuStr = "";11     for (int i = 0; i < cd; i++)12     {13         num = ran.Next();14         if (i % 2 == 1)15             tem = num % 10 + '0'; //數字16         else17             tem = num % 26 + 'A'; //字母18         rtuStr += Convert.ToChar(tem).ToString();19     }20     //寫入cookie21     HttpCookie cookie = new HttpCookie("check");22     cookie.Value = rtuStr.ToLower();23     HttpContext.Current.Response.Cookies.Add(cookie);24     return rtuStr;25 }26 27 /// <summary>28 /// 生成圖像29 /// </summary>30 /// <param name="check">字符</param>31 public static byte[] drawImg(string check)32 {33     Bitmap img = new Bitmap(90, 34);34     var ht = Graphics.FromImage(img);35     ht.Clear(Color.White);36     ht.DrawLine(new Pen(Color.SpringGreen), 1, 1, 90, 34);37     Font font = new Font("微軟雅黑", 20, FontStyle.Bold);38     var jianbian = new LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.Teal, Color.Snow, 2f, true);39     ht.DrawString(check, font, jianbian, 0, 0);40     ht.DrawRectangle(new Pen(Color.Aqua), 0, 0, img.Width - 1, img.Height - 1);41     MemoryStream ms = new MemoryStream();42     img.Save(ms, ImageFormat.Jpeg);43     ht.Dispose();44     img.Dispose();45     return ms.ToArray();46 }

mvc中調用

1 public ActionResult ShowValidate()2 {3     var check = Common.Validate.validation(4);4     byte[] buffer = Common.Validate.drawImg(check);5     return File(buffer, "image/jpeg");6 }

前臺

<img src="/Login/ShowValidate" id="img" onclick="changeCode()" class="validateImg">if (validateCode.toLowerCase() == getCode()) {    return true;        }        function changeCode() {    $("#img").attr("src", $("#img").attr("src") + "?");}function getCode() {    var cookies = document.cookie.split(";");    for (var i = 0; i < cookies.length; i++) {        var validate = cookies[i].split("=");        if (validate[0].replace(/(^/s*)|(/s*$)/g, "") == "check") {            return validate[1].replace(/(^/s*)|(/s*$)/g,"");        }    }}

xml文件

可擴展標記性語言,用來保存輕量級數據。

XML的標簽是成對出現的、并且是區分大小寫的。

XML文檔必須包含根節點,且只有一個。

創建XML文件

 1 //創建XML對象 2 XmlDocument doc = new XmlDocument(); 3 //創建文檔描述信息 4 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null); 5 doc.AppendChild(dec); 6  7 //創建根節點 8 XmlElement books = doc.CreateElement("Books"); 9 doc.AppendChild(books);10 11 //創建子節點12 XmlElement book1 = doc.CreateElement("Book");13 books.AppendChild(book1); //將子節點添加到books14 15 //給book1子節點追加子節點16 XmlElement name1 = doc.CreateElement("Name");17 name1.InnerText = "c#"; //賦值 文本值18 book1.AppendChild(name1);19 20 XmlElement price1 = doc.CreateElement("Price");21 price1.InnerXml = "<b>10.0</b>"; //賦值 html標簽22 book1.AppendChild(price1);23 24 XmlElement items = doc.CreateElement("Items");25 //給節點增加屬性26 items.SetAttribute("Name", "c#");27 items.SetAttribute("Price", "10.0");28 book1.AppendChild(items);29 30 doc.Save("Books.xml"); //保存31 32 //創建后33 <?xml version="1.0" encoding="utf-8"?>34 <Books>35   <Book>36     <Name>c#</Name>37     <Price>38       <b>10.0</b>39     </Price>40     <Items Name="c#" Price="10.0" />41   </Book>42 </Books>

向已有XML文件中追加

1 XmlDocument doc = new XmlDocument();2 if (File.Exists("Books.xml"))3 {4     doc.Load("Books.xml"); //加載 xml5     XmlElement books = doc.DocumentElement; //得到根節點6     //再建立元素進行追加7 }

獲取XML文件

 1 XmlDocument doc = new XmlDocument(); 2 doc.Load("Books.xml"); 3  4 XmlElement books = doc.DocumentElement; 5 XmlNodeList xnl = books.ChildNodes; //得到所有節點 6  7 foreach (XmlNode v in xnl) //遍歷得到所有節點值 8 { 9     Console.WriteLine(v.InnerText);10 }11 12 XmlNodeList xnl1 = doc.SelectNodes("Books/Book/Items"); //查找節點列表13 foreach (XmlNode node in xnl1)14 {15     Console.WriteLine(node.Attributes["Name"].Value); //得到name屬性的值16     Console.WriteLine(node.Attributes["Price"].Value); //得到price屬性的值17 }

刪除XML文件

1 XmlDocument doc = new XmlDocument();2 doc.Load("Books.xml");3 4 XmlNode xnl = doc.SelectSingleNode("Books/Book"); //查找單一節點5 xnl.RemoveAll(); //刪除全部6 doc.Save("Books.xml");7 Console.ReadKey();

LinqToXml

 1 //兼容傳統方法創建 2 XDocument xDoc = new XDocument(); 3 //xDoc.Declaration = new XDeclaration() 默認UTF-8 第一行不需要單獨建 4 XElement xRoot = new XElement("root", "值"); //定義元素 5  6 XElement xRoot1 = new XElement("root1");  //定義元素2 7 xRoot1.Value = "值1"; 8  9 XAttribute xattr = new XAttribute("Id", "1"); //定義屬性10 11 xDoc.Add(xRoot); //統一使用add添加12 xRoot.Add(xattr);13 14 xDoc.Save(@"d:/linqtoxml.xml");15 16 //真正的linq語法17 //F#  函數式編程語言18 new XDocument(19     new XElement("root",20         new XAttribute("id", "001"),21         "值")22     ).Save(@"d:/2.xml");23 //鏈式編程,流水線生產 f1().f2().f3()...24 25 //查找xml26 XDocument xdoc = new XDocument(new XElement("root"));//根節點27 xdoc.Root.Add(new XElement("person",28     new XAttribute("id", "1"),29     new XAttribute("name", "zhangsan"),30     new XAttribute("sex", "1")31     )); //添加子節點32 xdoc.Root.Add(new XElement("person",33    new XAttribute("id", "2"),34    new XAttribute("name", "lisi"),35    new XAttribute("sex", "2")36    ));37 xdoc.Save(@"d:/2.xml");38 39 <?xml version="1.0" encoding="utf-8"?>40 <root>41   <person id="1" name="zhangsan" sex="1" />42   <person id="2" name="lisi" sex="2" />43 </root>44 45 //開始查找、修改、刪除46 47 XDocument xdoc = XDocument.Load(@"d:/2.xml"); //加載xml48 foreach (XElement xlt in xdoc.Root.Elements()) //Root根節點 Elements 元素集合49 {50     if (xlt.Name.LocalName == "person") //Name節點名 LocalName不帶命名空間的節點名51     {52         if (xlt.Attribute("id").Value == "1") //判斷屬性值為1時53         {54             Response.Write(xlt.Attribute("name").Value); //輸出name55             xlt.Attribute("name").Value = "newname"; //修改name56             xlt.Remove(); //刪除此節點57             xdoc.Save(@"d:2.xml");58         }59     }60 }61 62 //Linq查詢語法63 //Descendants()所有子節點 可加某節點下所有節點64 var query = from s in xdoc.Descendants() //從集合里找 65             where s.Name.LocalName == "person"66             select s;67 foreach (XElement xlt in query)68 {69     Response.Write(xlt.Value);70 }71 72 //Linq方法語法(lambda表達式)73 foreach (XElement xlt in xdoc.Descendants().Where(s =>74 {75     if (s.Name.LocalName == "name")76     {77         return true;78     }79     return false;80 }))81 {82     Response.Write(xlt.Value);83 }

委托
使用delegate定義委托,將一個方法作為參數傳給另一個方法。
委托所指向的函數必須返回值與參數相同

  1 /// <summary>  2 /// 委托語法  3 /// </summary>  4 class Program  5 {  6     public delegate void delSayhi(string name); //定義委托  7     static void Main(string[] args)  8     {  9         delSayhi del = new delSayhi(sayHiChinese); //實例化委托調用具體方法 10         del("san"); //執行 11  12         delSayhi del1 = sayHiChinese; //直接賦值方式 13         del1("si"); 14  15         //匿名函數 16         delSayhi del2 = delegate(string name) { Console.WriteLine(name + ",思密達"); }; 17         del2("韓國"); 18  19         //lambda表達式  ()沒參數也要寫 => { //方法體 } 沒參數可以e=> Console.WriteLine(""); 如果只有一句話不用{} 返回的return可以省略 20         delSayhi del3 = (string name) => { Console.WriteLine(name + ",薩瓦迪卡"); }; 21         del2("泰國"); 22  23         sayHi("david", sayHiEnglish); //調用自定義方法 參數要調用的方法 24         Console.ReadKey(); 25     } 26  27     public static void sayHi(string name, delSayhi del) //定義方法 類型委托 28     { 29         del(name); 30     } 31  32     public static void sayHiChinese(string name) 33     { 34         Console.WriteLine("你好, 我叫" + name); 35     } 36     public static void sayHiEnglish(string name) 37     { 38         Console.WriteLine("hello, my name is {0}, nice to meet you!", name); 39     } 40 } 41  42  43  44 /// <summary> 45 /// 求任意數組最大值 46 /// </summary> 47 class Program 48 { 49     public delegate int delCompre(object o1, object o2); //定義比較委托 50     static void Main(string[] args) 51     { 52         //比較int 53         object[] objs = new object[] { 1, 2, 3, 4, 5, 32, 1, 243, }; 54         var max = getMax(objs, getIntMax); //傳入比較int方法 55         Console.WriteLine(max); 56  57         var max2 = getMax(objs, delegate(object o1, object o2) 58         { 59             return int.Parse(o1.ToString()) - int.Parse(o2.ToString()); 60         }); //匿名函數 與比較int一樣 61         Console.WriteLine(max2); 62  63         //比較string 64         object[] strs = new object[] { "abc", "efd", "asdf", "sd", "asdff" }; 65         var maxstrs = getMax(strs, delegate(object o1, object o2) 66         { 67             return o1.ToString().Length - o2.ToString().Length; 68         }); //匿名函數 69         Console.WriteLine(maxstrs); 70  71         var maxstrs2 = getMax(strs, (object o1, object o2) => 72         { 73             return o1.ToString().Length - o2.ToString().Length; 74         }); //lambda 表達式 75         Console.WriteLine(maxstrs2); 76  77         Console.ReadKey(); 78     } 79  80     public static int getIntMax(object o1, object o2) //比較int方法 81     { 82         int n1 = int.Parse(o1.ToString()); 83         int n2 = int.Parse(o2.ToString()); 84         return n1 - n2; 85     } 86     /// <summary> 87     /// 取一個任意數組的最大值 88     /// </summary> 89     /// <param name="objs">數組</param> 90     /// <param name="del">委托</param> 91     /// <returns></returns> 92     public static object getMax(object[] objs, delCompre del) 93     { 94         object max = objs[0]; 95         for (int i = 0; i < objs.Length; i++) 96         { 97             //if (max < objs[i]) object 無法確定是什么類型 所以不能用< 98             if (del(max, objs[i]) < 0) //如果委托值小于0 成立 傳入如何比較即可 99             {100                 max = objs[i];101             }102         }103         return max;104     }105 }106 107 108 /// <summary>109 /// 泛型<T>委托110 /// </summary>111 class Program112 {113     public delegate int delCompre<T>(T t1, T t2); //定義泛型委托114     static void Main(string[] args)115     {116         //int117         int[] nums = { 1, 2, 3, 4, 5 };118         int max = getMax<int>(nums, (int t1, int t2) => { return t1 - t2; });119         Console.WriteLine(max);120 121         //string122         string[] strs = { "asd", "sdf", "zxcvv", "123", "qwe" };123         string maxStr = getMax(strs, (string s1, string s2) => { return s1.Length - s2.Length; });124         Console.WriteLine(maxStr);125 126         Console.ReadKey();127     }128 129     public static T getMax<T>(T[] objs, delCompre<T> del)130     {131         T max = objs[0];132         for (int i = 0; i < objs.Length; i++)133         {134             if (del(max, objs[i]) < 0)135             {136                 max = objs[i];137             }138         }139         return max;140     }141 }

多播委托
注冊多個方法,調用時將這些方法依次執行一遍。

1 public delegate void my1();2 3 my1 my = Fun1();4 my+= Fun2(); //+=實現多播委托5 6 public static void Fun1(){7 }8 public static void Fun2(){9 }  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲男人天堂网| 欧美在线观看视频| 69久久夜色精品国产69| 国产精品久久久久国产a级| 成人在线视频网| 亚洲精品欧美日韩| 国产精品视频内| 日韩精品视频在线| 欧美最顶级丰满的aⅴ艳星| 深夜福利国产精品| 亚洲品质视频自拍网| 欧美中文字幕第一页| 韩国19禁主播vip福利视频| 亚洲人成网7777777国产| 日本亚洲欧洲色α| 国产专区精品视频| 国产精品久久久久久久午夜| 欧美色欧美亚洲高清在线视频| 日韩精品电影网| 日韩欧美在线观看视频| 精品国产自在精品国产浪潮| 精品久久久久久国产| 91精品视频在线看| 久久久综合免费视频| 一区二区在线视频播放| 亚洲图片欧美日产| 亚洲精品狠狠操| www.亚洲人.com| 伊人久久久久久久久久久| 亚洲欧美日韩中文在线制服| 爽爽爽爽爽爽爽成人免费观看| 亚洲xxxx妇黄裸体| 日韩中文在线观看| 色琪琪综合男人的天堂aⅴ视频| 北条麻妃一区二区三区中文字幕| 欧洲亚洲女同hd| 日韩欧美在线视频观看| 国产精品7m视频| 久久久www成人免费精品张筱雨| 日韩电影中文字幕av| 国产一区二区美女视频| 欧美精品电影免费在线观看| 中文字幕精品在线视频| 亚洲精品国产电影| 亚洲国产日韩精品在线| 日韩在线观看免费全集电视剧网站| 91精品视频观看| 国产精品嫩草影院一区二区| 亚洲黄色有码视频| 成人国产精品av| 久久露脸国产精品| 亚洲国产精品电影| 精品久久久久久中文字幕大豆网| 久久免费精品视频| 亚洲黄页网在线观看| 2019中文字幕全在线观看| 在线a欧美视频| 色樱桃影院亚洲精品影院| 91精品视频免费| 国产精品专区h在线观看| 国产欧美久久一区二区| 亚洲国产美女精品久久久久∴| 成人免费福利在线| 久久精品国产91精品亚洲| 亚洲欧美国产精品| 日韩最新av在线| 精品亚洲一区二区三区四区五区| 国产精品国语对白| 亚洲精品自拍偷拍| www.美女亚洲精品| 国产精品美女久久久久久免费| 国产精品高清在线| 清纯唯美亚洲综合| 亚洲一区二区在线播放| 欧美专区在线视频| 亚洲精品国精品久久99热| 国产精品成人aaaaa网站| 色狠狠av一区二区三区香蕉蜜桃| 成人美女免费网站视频| 91av免费观看91av精品在线| 国产精品99久久99久久久二8| 91中文字幕一区| 欧美日韩国产一区在线| 精品亚洲永久免费精品| 欧美小视频在线| 亚洲精品国产美女| 欧美极品少妇与黑人| 久久99国产精品久久久久久久久| 国语自产精品视频在免费| 97精品视频在线观看| 91精品视频播放| 亚洲欧美日韩天堂一区二区| 久久综合免费视频影院| 亚洲第一页在线| 丝袜一区二区三区| 亚洲欧洲免费视频| 成人在线一区二区| 国产一区二区三区三区在线观看| 97精品欧美一区二区三区| 一个人看的www久久| 欧美激情网站在线观看| 国产91在线高潮白浆在线观看| 亚洲资源在线看| 成人免费xxxxx在线观看| 日韩av大片免费看| 狠狠躁夜夜躁久久躁别揉| 亚洲影院色无极综合| 色偷偷88888欧美精品久久久| 欧美丝袜一区二区| 热久久免费视频精品| 91午夜在线播放| 国产91对白在线播放| 欧美精品videosex性欧美| 欧美丝袜一区二区三区| 欧美成人免费大片| 91精品国产91久久久| 国产日韩欧美视频| 日韩精品在线视频美女| 日韩亚洲欧美中文在线| 色偷偷偷亚洲综合网另类| 亚洲视频精品在线| 亚洲成人网在线| 成人免费看片视频| 日韩视频亚洲视频| 欧美亚洲成人精品| 国产精品久久久久久久久久久久久| 亚洲xxxx视频| 亚洲视频一区二区三区| 久久精品国产电影| 黄色一区二区在线观看| 美女啪啪无遮挡免费久久网站| 91在线精品播放| 91最新在线免费观看| 亚洲国产古装精品网站| 亚洲国产精品va| 日韩av中文字幕在线播放| 日韩在线高清视频| 欧美日韩国内自拍| 黄色成人在线播放| 国产精品99导航| 青青久久av北条麻妃黑人| 久久精品国产欧美亚洲人人爽| 日韩免费观看av| 亚洲色图校园春色| 色青青草原桃花久久综合| 国产精品视频成人| 精品国产91乱高清在线观看| 国产精品视频久久| 久久久精品久久久久| 亚洲欧美在线一区二区| 久久不射电影网| 日韩国产精品视频| 日韩中文在线视频| 亚洲精品按摩视频| 精品国产自在精品国产浪潮| 国产香蕉97碰碰久久人人| 国产精品高潮粉嫩av| 麻豆国产精品va在线观看不卡| 麻豆国产va免费精品高清在线| 久久久欧美一区二区| 中文字幕视频一区二区在线有码| 国产一区二区免费| 亚洲第一男人av| 91视频九色网站|