
C#学习
文章平均质量分 68
诗人江湖老
游啊游~
展开
-
[深入学习C#]表达式树类型——Expression tree types
表达式树允许将 lambda 表达式表示为数据结构而非可执行代码。表达式目录树是System.Linq.Expressions.Expression< D > 形式的表达式目录树类型 (expression tree type) 的值,其中 D 是任何委托类型。 如果存在从 lambda 表达式到委托类型 D 的转换,则也存在到表达式树类型 Expression< D > 的转换。而lambd原创 2015-06-04 13:36:45 · 5723 阅读 · 0 评论 -
C# 让Console控制台居中
using System;using System.Drawing;using System.Runtime.InteropServices;using System.Windows.Forms; public static class ConsoleUtils { public static void CenterConsole() {原创 2016-08-21 11:41:26 · 3780 阅读 · 0 评论 -
[转]C#实现的三种方式实现模拟键盘按键
原文地址1.System.Windows.Forms.SendKeys组合键:Ctrl = ^ 、Shift = + 、Alt = % 模拟按键:A private void button1_Click(object sender, EventArgs e) { textBox1.Focus(); SendKeys.Se转载 2016-08-18 11:22:05 · 23841 阅读 · 1 评论 -
用委托来实现IEqualityComparer<T>接口
直接上代码吧。class FuncEqualityComparer<T> : IEqualityComparer<T>{ readonly Func<T, T, bool> _comparer; readonly Func<T, int> _hash; public FuncEqualityComparer( Func<T, T, bool> comparer )原创 2016-06-06 15:29:40 · 1413 阅读 · 0 评论 -
[深入学习C#]——IEqualityComparer<T>中GetHashCode的作用
本文主要给自己看,内容太多,懒得写,直接附上参考博客。 参考一:C#——详析GetHashCode方法 参考二:.NET(C#):GetHashCode 的作用 参考三:What’s the role of GetHashCode in the IEqualityComparer in .NET?总结: 实现IEqualityCompare<T>接口的时候,需要实现Equals()和GetHa原创 2016-06-06 15:27:09 · 3690 阅读 · 1 评论 -
将Lambda表达式作为参数传递并解析——在构造函数参数列表中使用Lambda表达式(C#)
话不多说,先上代码:public class DemoClass { /// <summary> /// 通过Lambda表达式,在构造函数中赋初始值 /// </summary> /// <param name="propertyFunc"></param> /// <param name="propertyValue"></param> pub原创 2016-03-02 11:13:01 · 25758 阅读 · 0 评论 -
C#程序员经常用到的10个实用代码片段
原文地址 如果你是一个C#程序员,那么本文介绍的10个C#常用代码片段一定会给你带来帮助,从底层的资源操作,到上层的UI应用,这些代码也许能给你的开发节省不少时间。以下是原文:1 读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion; Console.WriteLine(“Platform: {0}”,原创 2015-10-22 20:19:15 · 1493 阅读 · 0 评论 -
C# 实现Button双击事件
为了能够触发C# Button的双击事件,我们可以重载MouseDown事件,记录每次鼠标按下的时间,如果两次点击的时间足够近的话,就触发一次双击方法。 C# Button是有DoubleClick事件的,只是它没有出现在事件列表中,而且.net也是把这个事件给”屏蔽”掉了,无论你双击一个按钮怎么快,也不会触发这个事件。 为了能够触发C# Button的双击事件,我们可以重载MouseDown事原创 2015-10-22 18:05:43 · 28416 阅读 · 1 评论 -
[深入学习C#]利用反射给对象赋值
C#中利用反射能够获取对象的属性信息,也可以利用反射给对象赋值。 我们如果想利用凡是给一个对象属性赋值可以通过PropertyInfo.SetValue()方式进行赋值,但要注意值的类型要与属性保持一致。 假设我们有如下一个结构:struct Person{ public string code{get; set;} public string name原创 2015-09-07 11:46:11 · 21897 阅读 · 0 评论 -
[转]C#4.0中的协变和逆变
原文地址 谈谈.Net中的协变和逆变关于协变和逆变要从面向对象继承说起。继承关系是指子类和父类之间的关系;子类从父类继承所以子类的实例也就是父类的实例。比如说Animal是父类,Dog是从Animal继承的子类;如果一个对象的类型是Dog,那么他必然是Animal。协变逆变正是利用继承关系 对不同参数类型或返回值类型 的委托或者泛型接口之间做转变。我承认这句话很绕,如果你也觉得绕不妨往下看看。如果原创 2015-07-31 10:58:13 · 19914 阅读 · 0 评论 -
[深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)
简介 使用线程的主要原因:应用程序中一些操作需要消耗一定的时间,比如对文件、数据库、网络的访问等等,而我们不希望用户一直等待到操作结束,而是在此同时可以进行一些其他的操作。 这就可以使用线程来实现。 本文主要介绍关于Thread和ThreadPool的基础知识。Thread类 基本用法 使用Thread类可以创建和控制线程,在下面的示例代码中,Thread类的构造函数重载为接受Th原创 2015-07-14 22:17:18 · 25199 阅读 · 0 评论 -
[深入学习C#]C#实现多线程的方式:使用Parallel类
简介 在C#中实现多线程的另一个方式是使用Parallel类。 在.NET4中 ,另一个新增的抽象线程是Parallel类 。这个类定义了并行的for和foreach的 静态方法。在为 for和 foreach定 义的语言中,循环从一个线程中运行 。Parallel类使用多个任务,因此使用多个线程来完成这个作业。 我们在前文中,对任务作出了一定的阐释,有兴趣的朋友可以前去查看。原创 2015-07-14 13:45:10 · 29888 阅读 · 1 评论 -
[深入学习C#]C#实现多线程的方式:Task——任务
简介 .NET 4包含新名称空间System.Threading.Tasks,它 包含的类抽象出了线程功能。 在后台使用ThreadPool。 任务表示应完成的某个单元的工作。 这个单元的工作可以在单独的线程中运行,也可以以同步方式启动一个任务,这需要等待主调线程。 使用任务不仅可以获得一个抽象层,还可以对底层线程进行很多控制。 在安排需要完成的工作时,任务提供了非常大的灵活性。 例如,可原创 2015-07-07 16:01:04 · 38535 阅读 · 0 评论 -
[深入学习C#]完成异步委托的三种方式
简介 创建线程的一个简单方式是定义一个委托,并且异步调用它。委托是方法的类型安全的引用。Delegate类还支持异步地调用方法。在后台,Delegate类会创建一个执行任务的线程。线程 线程是程序中独立的指令流,线程对客户端和服务器端应用程序都非常重要,线程是运行程序所必须的。 1.进程包含资源,如Window句柄、文件系统句柄或其他内核对象,每个进程都分配了虚拟内存。 2.每个进程原创 2015-07-07 10:22:17 · 29375 阅读 · 0 评论 -
[深入学习C#]LINQ查询表达式详解(2)——查询表达式的转换
简介 C#在执行LINQ查询表达式的时候,并不会指定其执行语义,而是将查询表达式转换为遵循查询表达式模式的方法的调用。具体而言,查询表达式将转换为以下名称的调用:Where、Select、SelectMany、Join、GroupJoin、OrderBy、OrderByDescending、ThenBy、ThenByDescending、GroupBy、Cast等等。 如同在前文中提到的用扩原创 2015-06-14 14:15:22 · 1949 阅读 · 0 评论 -
[深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询
简介 在Git上下载源码 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找、过滤等等常见的任务的时候,我们该如何去做呢? 我们可以自己写代码去对集合中的每个对象进行遍历,检查变量的每个字段看其是否满足条件。这样的故事已经发生太多次了,微软怎么可能容忍在C#里发生如此弱智的事情呢?于是,C#的设计者决定在C#中集成查询的语法原创 2015-06-12 15:56:47 · 13072 阅读 · 0 评论 -
[深入学习C#]输入输出安全性——可变类型形参列表的变化安全性
可变类型形参列表(*variant-type-parameter-lists) 可变类型形参列表(variant-type-parameter-lists )只能在接口和委托类型上出现。它与普通的type-parameter-lists的差异在于,它的每个类型形参前面可以加上变化性批注:in和out。 如果前面的变化性批注为out,则该类型形参成为协变类型形参;如果变化批注为in,则该类型形原创 2015-06-04 14:43:19 · 1007 阅读 · 0 评论 -
[深入学习C#]匿名函数、委托和Lambda表达式
匿名函数 匿名函数(Anonymous Function)是表示“内联”方法定义的表达式。匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型(了解详情)。匿名函数转换的计算取决于转换的目标类型:如果是委托类型,则转换计算为引用匿名函数所定义的方法的委托;如果是表达式树类型,则转换将计算以对象结构形式表示方法结构的表达式树。 匿名函数有两种语法风格:Lambda表达式原创 2015-06-02 16:38:24 · 17972 阅读 · 2 评论 -
优雅实现INotifyPropertyChanged接口——利用Lambda表达式
参考文章 在14年的时候,曾经读过上面的参考文章,不过当时并没有怎么理解,慢慢地也就将这篇文章忘诸脑后了。 直到前几天突发奇想,研究如何用Lambda表达式作为构造函数的参数(详见此文),研究之后,突然联想到上文,于是自己就去把这个想法实现了一遍。 话不多说,上代码 1.基类代码 public class BaseTemplate : INotifyPro...原创 2016-03-02 14:27:42 · 22641 阅读 · 1 评论