- 博客(62)
- 收藏
- 关注
原创 委托的概念
委托是一种引用类型,类似于其他语言的函数指针。委托派生于System.MutiCastDelegate类,而System.MutiCastDelegate类又派生于System.Delegate类
2018-06-24 23:19:50
321
原创 chapter38Condtional特性与条件编译
Condional特性:一般用于程序开发过程中的“测试方法”的编写。测试阶段定义“测试的宏”,发布商业版本,取消宏即可。演示用两种方法:1.方法的Conditional特性2.对于表达式的条件编译#if debug其他预定义特性:Serializable特性:声明结构可以序列化NonSerialized特性声明结构不可以序列化DllImport特性:声明是非托管代码实现的。托管代码:系统的、自动的...
2018-06-24 22:45:45
277
原创 chapter37特性Obsolete
预定义特性Attribute特性(Attribute):是一种允许我们向程序的程序集增加元数据的语言结构,提供了一种将声明性信息与代码关联起来的途径。元数据:类的组成部分、比如字段、属性、方法等。类还有其他的组成部分,比如预定义特性,也是类的组成部分。Obsolete特性:将过时的方法与类标注为“过时”(过期的),且在编译时,显示警告信息。源代码:/*** * 学习特性: * 一、系统特性 * 1...
2018-06-24 22:11:22
285
原创 chapter36Type的IsAssignableFrom(Type c)方法以及更多重要方法
bool IsAssignableFrom(Type c)功能:用来判断一个类Class1和另一个类Class2(参数)是否相同或是另一个类的父类或接口。其实就是一个类是否是参数类的父类或接口bool IsInstanceOfType(object o)功能:判断对象o是否是当前类(或者子类)的实例,或者实现本接口(即:当前类可以是o对象的类、父类、接口)bool IsSubclassOf(Typ...
2018-06-21 01:01:11
233
原创 chapter35反射调用私有方法与属性
属性的调用:例如:Assembly assObj = Assembly.LoadFrom(@"F:\学习反射与特性.exe");Type type = assObj.GetType("类名字符串"); //包含命名空间的类名//根据type创建对象Object obj = Activator.CreateInstance(type);//获得属性PropertyInfo prop = type....
2018-06-19 23:37:13
267
原创 chaper34动态调用有参与方法重载技术
源代码:实体类:/*** *实体类:被分析的对象 * * */using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 反射技术调用指定类无参方法{ public class Person { //字段 public strin...
2018-06-19 23:00:49
114
原创 chapter33反射技术动态调用指定类无参方法
根据类名与方法名(字符串),动态调用例如:Assembly assObj = Assembly.LoadFrom(@"F\学习反射与特性.exe");Type type = assobj.GetType("类名字符串"); //包含命名空间的类名//根据Type创建对象Object obj = Activator.CreateInstance(type);//获得方法信息MethodIn...
2018-06-18 23:37:54
123
原创 chapter31程序集Assembly与动态调用
Assembly:得到一个程序集中的反射信息。程序集中的两种存在形式:1)*.dll形式存在的程序集,不能直接运行,是“类库”2)*.exe的程序集,可以点击直接运行如何加载程序集:1)Assembly.Load(); //不推荐使用2)Assembly.LoadFrom("程序集的完整路径名称");例如:Assembly assObj = Assembly.LoadFrom(@"E:\Syst...
2018-06-18 22:53:02
191
原创 chapter30Type类的常用方法
反射的常用类:Type类:是设计用来包含类型的特性,可以获取程序使用的类型的信息(即:可以获得一个类包含的成员与方法)功能:使用Type类对象,可以查看一个类中所有的非私有字段、方法、属性(通过相关的参数也可以查看私有的字段、不常用)Assembly类:得到一个程序集中的反射信息功能:加载程序集Assembly.Load(); //不推荐使用Assembly.LoadFrom("程序集的完整路...
2018-06-17 22:36:06
198
原创 chapter29 反射的概念
生活中的反射:B超检查研究地球内部构造使用的“地震波”什么是反射程序在在运行过程中,可以查看其它程序集或本身程序集中的元数据行为。名词解释:程序集:项目中所有代码以及嵌入式资源的集合。元数据:我们编写的程序以及程序内数据。反射的作用:1)通过反射我们可以读取程序集(*.dll、*.exe)中的内容。2)可以根据(字符串)类名,来动态创建类的对象3)可以动态获取类对象中的习性(方法/属性/字段)4)...
2018-06-17 21:48:01
144
原创 chapter27lamda表达式
Lamda表达式本质就是匿名方法的简写形式通过反编译:我们知道其实Lamda表达式就是匿名方法的“简化机制”c#类似的机制还有:1)foreach是for的简化2)switch是if...elseif...的简化3)三元运算符是if...else的简化Lamda表达式,比匿名方法简化了如下步骤:减少了delegate关键字,以及参数的类型。从C#3.0开始代替“匿名方法”的写法。Lamda的简化性...
2018-06-14 00:21:26
129
原创 chapter26匿名方法
"匿名方法" 就是没有名字的方法“匿名方法”由于没有名称,所以只能赋值给一个委托进行调用。“匿名方法”的作用就是减少代码量,减少复杂性,且这个方法不需要在别处调用。“匿名方法”的本质还是方法,使用委托的地方都可以用例如:Func<int,int,int> funAddingMethodHandle = delegate(int num1, int num2){ return nu...
2018-06-13 23:48:39
126
原创 chapter25委托的取值与清空
得到委托列表:Delegate[] deleteArray = actDelete.GetInvocationList();foreach(Delegate item in deleteArray){ item.DynamicInvoke();}清空委托列表:Delegate[] deleteArray = actDelete.GetInvocationList();for (int...
2018-06-12 23:25:32
186
原创 chapter24委托的优点
委托的优点:1:在算法不变的情况下,优化改进方法的执行效率。2.在算法不变的情况下,改变内部实现(可以随意改内部使用的方法名称)总结:方法中对于委托的调用,类似一种面向“接口”编程的策略,使得程序的耦合性进一步降低,更加优雅。原理(把委托作为参数进行传递)源代码:/*** * * 研究委托的优点 * 举例: * 求1-1000之间的素数 * * */using System;using Sy...
2018-06-10 23:31:21
160
原创 chapter23学习Predicate委托
Predicate委托具备布尔返回值的委托,系统提供了Predicate委托来完成此功能。可以把Predicate委托,看作是Func委托的特例,因为如下:1.只接受一个参数2.必须返回bool类型3.功能上类似Func<T,bool>委托源代码:using System;using System.Collections.Generic;using System.Linq;using ...
2018-06-10 22:35:19
154
原创 chapter22Func委托
Func委托(通用委托)具备返回值的委托,系统提供了Func委托来完成此功能。规则:1:Func委托必须有一个返回数值2:如果需要给Func委托添加参数,则轨道在尖括号内的最后一个为返回类型,前面的均是参数源代码:/*** *学习Func委托 * * 规则: * 1.必须有一个返回数值 * 2.Func泛型委托,尖括号中最后一个为返回类型 * 3.Func泛型委托,如果尖括号中只有一个参数,则...
2018-06-10 22:23:11
112
原创 线程12:线程问题同步示例2
/*** *进一步显示多线程死锁问题 * * * */using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace 线程问题同步示例2{ class Program { ...
2018-06-10 01:32:39
111
原创 线程11:线程的死锁与同步
1)线程的死锁问题2)线程的”死锁与”同步”问题3)线程”同步”是线程中非常重要的一个概念,所谓同步是指线程之间存在的先后顺序的关联关系。 使用语法 Lock(对象) {//}多个线程可能由于争抢一个所谓的公共资源,造成一些异常情况,解决方法可以使用lock关键字,让多个线程顺序访问公共资源,这个技术也叫线程的同步.源代码:/*** * *1演示线程的死锁以及解决方式 * 多个线程可能由于争抢...
2018-06-10 01:31:11
121
原创 chapter21Action委托2
源代码:/*** *1.学习Action<T> *2.泛型委托的参数最多为16个 * */using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 学习Action委托2{ class Program { //声明泛型委托 ...
2018-06-10 01:24:43
98
原创 chapter21学习Action委托
除了我们自定义委托,系统给我们提供了内置委托类型:Action、Func、Predicate等目的是减少自定义委托的必要。Action是一个没有参数,没有返回类型的委托。Action还有16个泛型重载:Action<T>Action<T1,T2>Action<T1....T15,T16>源代码:/*** *Action委托 *目的:为了简化委托的使用 * * ...
2018-06-10 01:23:44
113
原创 chapter20:委托与事件案例回顾
源代码:(1)调用方 InvokeClass.cs/*** *委托的调用方(包括定义委托) * * 分四个步骤: * 1.定义委托 * 2.声明委托 (声明委托的实例) * 3.注册 * 4.调用 * * 注意:先注册,后调用 * * * */using System;using System.Collections.Generic;using System.Linq;using Sy...
2018-06-09 00:35:35
120
原创 线程10:前台线程和后台线程
线程分为“前台线程”和“后台线程”。1) 应用程序的主线程以及使用Thread构造的线程都默认为前台线程,线程池中的线程是后台线程。(我们默认创建的线程是“前台线程”)。2) 只有所有的前台线程都关闭后,系统才真正的关闭。后台线程,会随着所有前台线程的关闭而自动关闭。3) 后台线程不会阻止进程的中止。属于某个进程的所有前台线程都中止后,进程就会被中止,所有剩余的后台线程都会停止且不会完成。4) 可...
2018-06-08 23:48:28
2076
原创 线程9:线程的优先级和状态
线程的执行没有规律,如果多个线程执行,能不能设置优先顺序?线程的优先级可以影响线程的调用顺序,我们可以通过使用Priority枚举属性来设置线程的优先级。说明:Highest: 最高级别优先AboveNormal: 在Highest级别后,在Normal之前。Normal: 默认情况下最初为NormalBelowNormal: 在Normal之后,在lowest之前Lowest: ...
2018-06-08 23:46:19
1494
原创 线程8:回调函数方式接受线程结果
/*** *回调函数方式: *启动子线程之后,主线程接着干活,不需要等待 *启动子线程之后,并不影响主线程 * * * */using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace 通过回调函数{ class Pro...
2018-06-07 23:26:23
1455
原创 线程7:等待句柄方式接受线程结果
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace 等待句柄与回调函数方式接受线程结果{ class Program { /// <summary> /// 委托开启线程...
2018-06-07 23:25:03
158
原创 线程6:委托异步调用线程且等待返回数值
委托开启一个线程,参数传递,以及获取线程的返回数值。例:Func<int, int> ac = ThreadMethod3;//IAsyncResult 表示获得当前线程的状态IAsyncResult ar= ac.BeginInvoke(88, null, null);While(!ar.IsCompleted){ Console.Write(“.”);Thread.Sleep(10...
2018-06-07 23:23:28
485
原创 线程5:委托开启线程
使用委托开启一个线程,参数传递,以及获取线程的返回数值。例子:Action ac = ThreadMethod1;ac.BeginInvoke(null,null); 注意;委托开启的线程都是后台线程,后台线程会随着前台线程的关闭而自动关闭 源代码:/*** *学习使用委托开启线程 * * 注意; * 委托开启的线程都是后台线程,后台线程会随着前台线程的关闭而自动关闭 * * */usin...
2018-06-07 00:10:33
614
原创 线程4:线程传参方法_构造函数传参
构造方法传参:可以定义专门的类,在New的时候,在构造函数中传递参数,从而实现线程中带参数传递。源代码;专门的类:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace ThreadPro{ public class M...
2018-06-07 00:09:00
831
原创 chapter19学习小括号运算符(分组运算符)
源代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;namespace chapter19学习小括号运算符{ class Program { /// <summary>...
2018-06-07 00:04:30
246
原创 chapter18正则表达式:学习“或”元字符
| 将两个匹配条件进行逻辑“或”运算() 用小括号指定子表达式(也就是分组)例如:重复多个(abcd){n}进行分组限定。string str = "同学们同学们”;string strPattern = @"(同学们){2}";Regex.IsMatch(str, strPattern);源代码:using System;using System.Collections...
2018-06-05 23:37:29
89
原创 线程3:线程传参方法1
1)多线程技术适用环境任务执行比较耗时的情况,也可以同时解决一些非常耗时的程序长时间占用cpu资源2)定义一个多线程一般写法lamda表达式方式使用委托开启一个线程3)多线程的特点:运行顺序不确定线程之间平行执行4)线程的参数传递一、使用带object参数的方法(通过查看Thread类的定义) 具体使用start()传递参数。 备注:如果需要传递多个参数,可以传递一个集合对...
2018-06-05 18:40:31
202
原创 线程2:多线程的两种定义方式
多线程的特点:并行运行,没有任何次序。/*** *多线程: *1.一般定义方式 *2.多线程的特点 * 1)执行的顺序没有规律 * 2)两个线程是同时执行的 *3.lamda的定义方式 * * * */using System;using System.Collections.Generic;using System.Linq;using System.Text;using Syste...
2018-06-05 18:21:18
544
原创 chapter17(2)正则表达式 重复描述字符
{n} 匹配前面的字符n次{n,} 匹配前面的字符n次或多于n次{n,m}匹配前面的字符n到m次? 重复零次或者一次+ 重复一次或者更多次* 表示零到多个元字符,或表示重复零次或者更多次(即:重复前面的次数)例如:判断合法的QQ号(必须5-12位)string strQQ = “517722017”;str strPattern = @"\d{5,12}$";...
2018-06-04 23:03:50
198
原创 chapter17学习"包含"与"非"元字符
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;namespace chapter17学习_包含_与__非元字符{ class Program { /// <summary>...
2018-06-04 22:47:11
110
原创 线程1:多线程的概念
进程:简单说是指在系统中正在运行的一个应用程序,通过资源管理器我们可以看到对进程的描述。线程:线程是系统分配处理器时间资源的基本单位。多线程技术使用环境:任务执行比较耗时的情况,也同时可以解决一些非常耗时的程序长时间占用cpu资源。定义一个多线程:(1)一般写法(2)lamda表达式(3)使用委托开启一个线程多线程的特点:(1)运行顺序不确定(2)线程之间平行执行using system.Thre...
2018-06-04 18:32:09
221
原创 Winform中为窗口设置双缓冲
双缓冲为了解决控件刷新时,闪烁的问题。请在构造函数里面底下加上如下几行:[csharp] view plain copySetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景. SetStyle(ControlStyles.DoubleBuffe...
2018-06-04 15:07:16
4170
原创 chapter16基础元字符的讲解
基础元字符:\w表示字母、数字、下划线、汉字“包含”与 “非”元字符[abc] 表示匹配中括号中的字符[a-c] 表示a字符到c字符之间的字符[^X] 表示匹配除了X以外的任意字符[^abcd]表示匹配除了abcd之外的任意字符例如: 把字符串中所有“同学们”,替换为“*”字符string str = “同学们,大家上午好!”;string strPattern= @'[同学们]”str...
2018-06-03 22:50:28
133
原创 chapter15正则表达式的优势
基础语法元字符:. 表示任意字符(换行符除外)\w 表示字母、数字、下划线、汉字。\W 表示“\w”的补集\s 表示任意空白字符(包括换行\n、 回车\r、制表\s、垂直制表\v、换页符\f)\S 表示"\s"的补集\d 表示数字\D 表示非数字* 表示重复0到多次例如:以数字开头,中间有任意个数字,且数字结尾的字符串string str =@"^\d*$";Regex.IsM...
2018-06-03 00:51:30
635
原创 异步Socket编程(1)概念
所谓异步操作模式就是希望让某个工作开始以后,能在这个工作尚未完成的时候继续处理其他工作。比如:客户端服务器端随时可以接受信息与发送信息。...
2018-06-02 16:59:22
285
原创 chapter14正则表达式概念
什么是“正则表达式”正则表达式,又称规则表达式,(英语:Regular Expression,常简写regex、regexp或RE)。正则表达式通常被用来检查、检索、替换那些符合某个模式规则的文本。例如:检查给定的字符串是否为合法的邮箱地址。再例如:屏蔽或替换用户输入的“非法”字符串Regex类与基本元字符静态方法:IsMatch() "匹配"(是否符合正则表达式)Replace() "...
2018-06-02 14:34:42
180
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人