日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中的扩展方法,Linq,IO和多线程的定义和实例

發布時間:2023/12/9 C# 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中的扩展方法,Linq,IO和多线程的定义和实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?? 前段時間學C#的上轉型,泛型,lambda表達式這些應用的理解很費勁。學過之后我多多的練習了幾天,接下來繼續復習C#的其他一些概念,說實在的這些知識點學過之后很容易忘,但是都是很重要的,所以發表在博客上沒事可以多看看復習一下。

??? 第一:擴展方法-----在不更改原來類的基礎上,為類添加的方法。擴展方法的行為和靜態方法非常的類似,你只能在靜態類中聲明它們。為聲明一個擴展方法,你需要給該方法的第一個參數指定this關鍵字,而且你的第一個參數必定是你所擴展的類型實例。簡單點說就是給現在已經存在的類,在不修改該類源代碼的情況修改,向該類中添加某些方法實現特定的功能。其實本人不會喜歡擴展方法,我覺得直接定義一個普通函數就可以實現的?;蛟S我現在接觸的實例還少吧。

????需要注意的是: 1,擴展方法必須寫靜態類中??

?????      ? ?2,擴展方法必須是靜態方法,雖然是靜態方法,但是這個擴張方法是為對象擴展的,只能由對象調用。

???? 他的寫法如下: public static class 類名??

??????????????????????? ?{? public static 返回值 方法名(this 要擴展的類型 對象名[,參數列表])

             { }

???????????????????? ?? }??

???????? 這里的? this 要擴展的類型 對象名[,參數列表] 這個參數只起到一個說明性作用。?

?? 下面是一個擴展方法的實例:

using System; using System.Collections.Generic; using System.Linq; public class StudyExtendMethod {public static void Main(){string file = @"E:\FTPPUBLISH\學習資料\KindEditor\kindeditor-v4.0.3\examples\colorpicker.html";Console.WriteLine(file.GetFileType());string sss = "78.9.09.mp3";Console.WriteLine(sss.GetFileType());People pp = new People();pp.WatchTime("www");string od = pp.GetInfo("張三");Console.WriteLine(od);List<int> list = new List<int>();list.Add(1);list.Add(19);list.Add(34);list.Add(56);list.Add(2);list.Add(90);list.Add(23);list.Add(27);var c = list.GetBigTen(10);foreach(int d in c){Console.WriteLine(d);}} } public static class ExtendMethod {/*this string ss這個參數只起到一個說明性作用。這個擴展方法是為string的對象擴展的,只能有string得對象來使用str值得是使用這個擴展方的對象。*/public static string GetFileType(this string str){string[] strs = str.Split('.');return strs[strs.Length-1];}public static void WatchTime(this People p,string name){Console.WriteLine(name +" "+DateTime.Now);}public static string GetInfo(this People p,string name){return name+"sssss";}public static IEnumerable<int> GetBigTen(this List<int> list,int a){return list.Where(p=>p>a);}} public class People {}

??? 第二:Linq----Linq是語言集成化查詢??

基礎語法有: from 元素 in 集合;where 元素條件;orderby 元素.屬性 ascending; group 元素 by 元素.屬性;select 元素?? 注意:如果使用group by語句,則不需要select。

?? 下面是Linq的一個簡單的實例:

View Code View Code using System; using System.Collections.Generic; using System.Linq; public class StudyLinq3 {public static void Main(){List<Student> list = new List<Student>();list.Add(new Student(){Age=10,Name="Jack",Address="bj"});list.Add(new Student(){Age=67,Name="Mack",Address="鄭州"});list.Add(new Student(){Age=23,Name="Dack",Address="USA"});list.Add(new Student(){Age=56,Name="Cack",Address="bj"});list.Add(new Student(){Age=8,Name="Eack",Address="鄭州"});list.Add(new Student(){Age=34,Name="Hack",Address="bj"});list.Add(new Student(){Age=18,Name="小紅",Address="USA"});var result = ( from p in listwhere p.Age >30select p).OrderByDescending(pp=>pp.Age);foreach(Student s in result){Console.WriteLine(s.Age); }/*string[] str = {"a","bb","abc","中華民謠","USA"};IEnumerable<string> result = from p in strwhere p.Length>3select p;foreach(string s in result){Console.WriteLine(s); }IEnumerable<string> result = str.Where<string>(p=>p.Length>3);foreach(string s in result){Console.WriteLine(s); }*/} }public class Student {public int Age{get;set;}public string Name{get;set;}public string Address{get;set;} }

?
??? 第三:IO using---I/O的意思是input/output輸入和輸出他的參照物是程序。輸入:值得是通過外接設備向程序輸入;輸出:程序箱外界設備輸出內容。

特別需要理解的是:? File類是一個重要的IO的應用。需要理解以下幾個概念:

???        ? FileStream是一個雙向流,既可以讀也可以寫;

??        ?? StreamWriter:單向流---輸出;

???        ? StreamReader:單向流---輸入。

下面是在老師的領導下寫的一個綜合的實例,其中8個練習的Test()函數,有助于自己深刻理解運用File類相關知識:

View Code View Code using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Security.AccessControl; namespace StudyIO {class Program{static void Main(string[] args){// Directory.CreateDirectory("d:\\ss");//string[] strs = Directory.GetFiles("d:\\mp3");//foreach (string str in strs) //{// Console.WriteLine(str);//}string[] strs = Directory.GetFileSystemEntries("e:\\ftppublish");foreach(string s in strs){if (Directory.Exists(s)) {string[] ss = Directory.GetFileSystemEntries(s);foreach(string fs in ss){Console.WriteLine(fs);}}}}static void Test8() {Stream streams = File.Open("D:\\1.cs", FileMode.Open);Stream streamw = File.Open("D:\\1.cs", FileMode.Open);BufferedStream stream = new BufferedStream(streamw);// stream.Write();// stream.Read(); }static void Test7() {FileStream stream = File.Open("d:\\1.cs", FileMode.Open);BinaryReader reader = new BinaryReader(stream);byte[] buffer = new byte[1024];int i = 0;string str = "";while ((i = reader.Read(buffer, 0, buffer.Length)) != 0){str += Encoding.UTF8.GetString(buffer, 0, i);}reader.Close();stream.Close();Console.WriteLine(str);}static void Test6(){//FileStream stream = File.Open("D:\\1.cs", FileMode.Append);//StreamWriter writer = new StreamWriter(stream);//writer.Write("你好");//writer.Close();// Test5(); }static void Test5() {//只是單獨操作字符StreamReader reader = new StreamReader("d:\\1.cs",Encoding.UTF8);//先讀string str = reader.ReadLine();while (str != null){Console.WriteLine(str);str = reader.ReadLine();}reader.Close();}static void Test4() {//1,讀源文件FileStream read = File.Open(@"E:\FTPPUBLISH\學習資料\[電影天堂-www.dy2018.net]龍門飛甲.720p.HD中文字幕.rmvb", FileMode.Open);long count = read.Length;//2,寫文件FileStream write = File.Open("d:\\23.rmvb", FileMode.OpenOrCreate);byte[] buffer = new byte[1024 * 1024 * 4];int i = 0;int r = 0;while ((i = read.Read(buffer, 0, buffer.Length)) != 0){r = r + i;string s = (((double)r / count) * 100).ToString("0.00") + "%";Console.WriteLine(s);write.Write(buffer, 0, i);}write.Close();read.Close();}static void Test3() {FileStream fs = File.Open("d:\\1.cs", FileMode.Open);//默認緩沖區為1024,每次從文件(文件流)讀1024個字節byte[] buffer = new byte[1024];//當程序讀文件的收,把讀取的自己從緩沖流的第一個元素開始放。//已經讀取的字節數,如果i=0的話,說明已經讀取到末尾了,從而結束循環int i = 0;string result = "";while ((i = fs.Read(buffer, 0, 1024)) != 0){Console.WriteLine(i);result += Encoding.UTF8.GetString(buffer, 0, i);}fs.Close();Console.WriteLine(result);}static void Test2() {//寫操作FileStream fs = File.Open("d:\\1.cs",FileMode.Open);//向文件中寫內容string str = "這是C#的IO操作";byte[] buffer = Encoding.UTF8.GetBytes(str);fs.Write(buffer,0,buffer.Length);fs.Close();}static void Test() {//File.Create("d:\\1.cs");//File.Copy("d:\\12.mp3", "E:\\刀劍如夢.mp3");//File.Delete("E:\\刀劍如夢.mp3");//File.Move("d:\\12.mp3", "E:\\刀劍如夢.mp3");// FileAttributes fa = File.GetAttributes("E:\\刀劍如夢.mp3");// Console.WriteLine(fa);// DateTime dt = File.GetCreationTime("E:\\刀劍如夢.mp3");// Console.WriteLine(dt.ToString()); }} }

?

??? 第四:多線程----進程:一個應用程序就是一個進程,一個進程中可以包含多個線程。以前在學校學操作系統的時候學過有關多線程的一些知識,不過似乎現在學C#涉及的并沒有以前學的那么多和深,或許還沒達到那個水平吧。

下面是一個很簡單很容易理解的多線程源代碼:

View Code using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace StudyThread {class Program{static void Main(string[] args){//創建一個線程 Thread thread = new Thread(new ThreadA().test);//線程處于就緒狀態,沒有執行 thread.Start();for (int i = 0; i < 100; i++){//讓當前線程休息500毫秒,當阻塞結束處于就需狀態// Thread.Sleep(500);Console.WriteLine("我是主線程" + i);} }}public class ThreadA {public void test(){for (int i = 0; i < 100; i++){//Thread.Sleep(1000);Console.WriteLine("我是子線程" + i);}}} }

?

?

轉載于:https://www.cnblogs.com/lan-net/archive/2012/08/11/2633827.html

總結

以上是生活随笔為你收集整理的C#中的扩展方法,Linq,IO和多线程的定义和实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。