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

   前段时间学C#的上转型,泛型,lambda表达式这些应用的理解很费劲。学过之后我多多的练习了几天,接下来继续复习C#的其他一些概念,说实在的这些知识点学过之后很容易忘,但是都是很重要的,所以发表在博客上没事可以多看看复习一下。

    第一:扩展方法-----在不更改原来类的基础上,为类添加的方法。扩展方法的行为和静态方法非常的类似,你只能在静态类中声明它们。为声明一个扩展方法,你需要给该方法的第一个参数指定this关键字,而且你的第一个参数必定是你所扩展的类型实例。简单点说就是给现在已经存在的类,在不修改该类源代码的情况修改,向该类中添加某些方法实现特定的功能。其实本人不会喜欢扩展方法,我觉得直接定义一个普通函数就可以实现的。或许我现在接触的实例还少吧。

    需要注意的是: 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

准确率 召回率_吴恩达深度学习笔记(61)-训练调参中的准确率和召回率

单一数字评估指标(Single number evaluation metric)无论你是调整超参数&#xff0c;或者是尝试不同的学习算法&#xff0c;或者在搭建机器学习系统时尝试不同手段&#xff0c;你会发现&#xff0c;如果你有一个单实数评估指标&#xff0c;你的进展会快得多&#xff0c;它可以快…

CDU集训代码:基础算法和数据结构2

做题地址&#xff1a; http://acm.hdu.edu.cn/diy/contest_login.php?cid16636 Problem A: HDU1040 排序题&#xff0c;可以直接使用c提供的排序&#xff0c;如果是JAVA&#xff0c;也可以使用自带的排序方法。C语言需要自己写排序算法。 #include<cstdio> #include<…

[html] 如何禁止input输入的历史记录

[html] 如何禁止input输入的历史记录 给form加上 autocompleteoff 可以禁止整个表单的历史记录给单个input加上 autocompleteoff 可禁止这个input的历史记录个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起…

python迷宫最短路径_python实现最短路径的实例方法

解决最短路径问题&#xff1a;(如下三种算法)(1)迪杰斯特拉算法(Dijkstra算法)(2)弗洛伊德算法(Floyd算法)(3)SPFA算法第一种算法&#xff1a;Dijkstra算法广度优先搜索解决赋权有向图或者无向图的单源最短路径问题.是一种贪心的策略算法的思路声明一个数组dis来保存源点到各个…

[html] html如何创建图片热区(img usemap)?

[html] html如何创建图片热区&#xff08;img usemap&#xff09;&#xff1f; <img src"china.gif" usemap"#mymap"><map name"mymap"><area shape"rect" href"a.html" coords"0,0,50,50"><…

探讨LoadRunner的并发用户和集合点

探讨LoadRunner的并发用户和集合点 近来跟踪一个项目&#xff0c;发现同事们在执行性能测试时&#xff0c;比较热衷于使用集合点&#xff0c;从概念上认为要得到并发用户就必须设置集合点&#xff0c;认为在执行一个压力测试脚本时&#xff0c;设置了集合点才算是有效的并发用…

python在职场的用处大吗_Python未来发展怎么样,未来办公是否都需要精通Python?...

首先&#xff0c;要先了解Python是什么&#xff1f;Python是一种计算机程序设计语言&#xff0c;又被称为胶水语言&#xff0c;可以用混合编译的方式使用c/c/java等语言的库。你可能已经听说过很多种流行的编程语言&#xff0c;比如在大学里感觉非常难学的C语言&#xff0c;进入…

spring gateway 鉴权_通过spring实现service变成controller,代码得到了简化

在网上发现了一个牛X的思路&#xff0c;在做restful的时候&#xff0c;如果业务改变&#xff0c;需要每次都修改controller&#xff0c;后来方便了&#xff0c;直接透传的方式&#xff0c;其实也比较麻烦&#xff0c;每次都要写controller。需求变了接口也发生了改变&#xff0…

java中return返回值_Java中return的用法

展开全部一、return语句总是用在方法中&#xff0c;有两个作用。一个是返回方法指定类型的值(这个值总62616964757a686964616fe59b9ee7ad9431333366306434是确定的)。一个是结束方法的执行(仅仅一个return语句)。二、实例1 。返回一个String。private String gets(){String s …

Magento 模块详解

模块&#xff08;module&#xff09;是Magento的核心。站点上的任何 一个动作&#xff08;action&#xff09;&#xff0c;无论是在前台和还是在后台的每一个操作都是通过模块来实现的。模块是可以视为一个容器&#xff0c;它可包 含下面这几项&#xff1a;设置(settings)&…

python运行别人的项目_pycharm实现在虚拟环境中引入别人的项目

如果你想引入别人的项目&#xff0c;但是呢引入的项目可能与自己原先装的模块的版本产生冲突&#xff0c;而且如果引入一个项目就在本地进行运行使用&#xff0c;每个项目用的依赖包都不大相同&#xff0c;就会导致解释器安装包过多&#xff0c;就会导致加载过慢&#xff0c;甚…

java 事件分发线程_深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) [转载]...

本系列文章导航本文主要解决的问题是&#xff1a;如何使其Swing程序只能运行一个实例&#xff1f;抛开Swing&#xff0c; 我们的程序是通过java 命令行启动一个进程来执行的&#xff0c;该问题也就是说要保证这个进程的唯一性&#xff0c;当然如果能够访问系统的接口&#xff0…

java redis 分布式锁_使用Redis单实例实现分布式锁

一、前言在同一个jvm进程中时&#xff0c;可以使用JUC提供的一些锁来解决多个线程竞争同一个共享资源时候的线程安全问题&#xff0c;但是当多个不同机器上的不同jvm进程共同竞争同一个共享资源时候&#xff0c;juc包的锁就无能无力了&#xff0c;这时候就需要分布式锁了。常见…

设计一个按优先数调度算法实现处理器调度的程序_计算机中的程序都是怎么运行的,来深入了解一下吧...

在现代计算机操作系统中&#xff0c;总是会保持多道程序环境。一个作业被提交后&#xff0c;通常经过作业调度和进程调度后&#xff0c;才能获得处理机。有时为提高内存利用率&#xff0c;还会设置中程调度。那我们先来了解一下处理机调度的层次吧。高级调度&#xff0c;又称作…

从数据库加载程序集

有的做MSCRM2011开发的朋友会奇怪&#xff0c;注册的Plugin可以注册在数据库中&#xff0c;那么它如何去加载这个dll呢。最近正好有空&#xff0c;简单地实现了一下从数据库加载程序集&#xff0c;关键的地方是需要使用Assembly.Load方法的一个重载&#xff1a; Assembly.Load(…

Android 获取包名,版本信息及VersionName名称

话不多说&#xff0c;直接上代码&#xff0c;此处&#xff0c;主要是在版本升级的时候&#xff0c;使用较多。private String getAppInfo() {try {String pkName this.getPackageName();String versionName this.getPackageManager().getPackageInfo(pkName, 0).versionName;…