摘要:前言与此相关的类JavaScriptSerializer为启用 AFAX 的应用程序提供序列化和反序列化功能。JavaScriptTypeResolver提供用于实现自定义类型解析器的抽象基类。JavaScriptConverter为自定义类型转换器提供抽象基类。JavaScriptConverte...
阅读全文
摘要:相关类:ConfigurationSectionConfigurationElementCollectionConfigurationElement完成后的配置: 实现:1.首先实现ConfigurationElement 抽象类。注意ConfigurationProperty 的 name 是区分大小写的。public class JRogerElement : ConfigurationElement{ public JRogerElement() { } ...
阅读全文
摘要:介绍: C# 中反射有 3 种方式去实现:Emit,Expression Tree,Activator。那么他们的性能也跟我的书写顺序是一样的,最前面的Emit是最快的,Expression Tree次之,Activator最慢。 下面通过Expression Tree创建一个对象的实例: publ
阅读全文
摘要:示例:var type = Type.GetType("JRogerInventory.MainWindow");var constructor = type.GetConstructor(new[] { type });var obj = constructor.Invoke(new object[] { this.OwnerWindow });var win = obj as Window;if (win == null) return;win.Show();分析:代码很简单。获取要调用对象的类型存入 type 变量,调用GetConstructor 并传入对象类型返回
阅读全文
摘要:Mapper:Mapper的核心功能是创建一个委托函数并映射到一个目标类的实例。此委托是使用表达式树创建的一个lambda表达式。在这个函数中有一个双重循环,从 DataRecord 获取字段并和从实体类中获取的属性名称比较从而填充实体实例。所以第一个要求就是在使用这个 Mapper时,DataReader的字段名必须匹配将要填充类的属性名且要填充的属性是可写的。对于每个映射属性检查源和目标类型,不管他们是否为空,不管他们是否需要转换。我们需要的所有信息中存在 SchemaTable,但是 IDataReader 不处理 null 值。/// /// 从提供的 DataRecord 对象创建新
阅读全文
摘要:ISerializable 接口MSDN注解:允许对象控制其自己的序列化和反序列化过程。ISerializable 接口的定义:public interface ISerializable{ void GetObjectData(SerializationInfo info, StreamingContext context);}意思就是我们可以通过实现ISerializable 接口来控制序列化与反序列化后的结果。但是只有使用BinaryFormatter 时才有用。使用JavaScriptSerializer 类并没有效果。下面通过一个示例学习一下。示例定义实现ISerializab...
阅读全文
摘要:线程间通信 我们看下面的图图1 我们来看线程间通信的原理:线程(Thread B)和线程(Thread A)通信, 首先线程A 必须实现同步上下文对象(Synchronization Context), 线程B通过调用线程A的同步上下文对象来访问线程A,所有实现都是在同步上下文中完成的.线程B有两种方式来实现线程间的通信. 第一种:调用线程A的同步上下文对象,阻碍当前线程,执行红色箭头调用,直到黄色箭头返回(同步上下文执行完毕)才释放当前线程. (1->2->3->5) 第二种: 调用线程A的同步上下文对象(实际上是在开启一个新线程去执行,1->2->3->
阅读全文
摘要:要判断Button.Click是否已经绑定了Click只能去Button的EventHandlerList里面找事实上, C#的Control封装了EventHandlerList, 但它是protected的, 所以我们不能简单的看到它的存在, 不过, 如果你走Debug Mode的话, 还是可以看得很清楚的, 但如果真要把它拿出来用, 就只能用Reflect了PropertyInfo propertyInfo = (typeof(System.Windows.Forms.Button)).GetProperty("Events", BindingFlags.Instan
阅读全文
摘要:NLogNLog 目前最为出色的 .NET 日志库,非常容易配置,且极具灵活性。最重要的是与 log4net 相比,NLog 的开发很活跃。顺带提一句,NLog 完全兼容 Mono。Mono.Cecil.NET IL代码及 Assembly 操纵库,可以不需要把 DLL 加载到内存就能够分析其中的元数据和类型,也能够创建 Assembly。此库被广泛应用于涉及 IL 代码分析和生成的领域。NRefactoryNRefactory 提供了对 C# 和 VB.net 代码的解析和编译功能。你可以通过 NRefactory 把一段 C# 源程序解析成抽象语法树,甚至还能够进行语义分析和生成 IL代码
阅读全文
摘要:public class Student { public string First { get; set; } public string Last { get; set; } public int ID { get; set; } public string Street { get; set; } public string City { get; set; } public List Scores; } List students = new List() { ...
阅读全文
摘要:由于我们使用的FCL(Framework Class Library)是由微软开发人员写出来的。大部分规则默认都是符合欧洲人习惯的。就像数字的格式化。但这个默认规则在我们中国用着实在是不爽。比如:123,456,789会英语的都知道,Hundred、Thousand、Million和Billion,都是三位三位的分隔。但是我们中国人的习惯是四位,我们没必要这点儿东西也学人家的吧。但是.NET 里面 默认就是这样进行分隔的。这个时候来让我们一步一步的将这个默认规则给改成符合我们中国人习惯的格式。好吧,开始。。。以下会用到两个命名空间:System.Globalization;System.Thr
阅读全文
摘要:递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现像.程序调用自身的编程技巧称为递归( recursion)。一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。注意:
阅读全文
摘要:String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分 配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则 可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使 用 StringBuilder 类可以提升性能。通过用一个重载的构造函数方法初始化变量,可以创建 StringBuilder 类的新实例,正如以下示例中所阐释的那样。StringBuilder
阅读全文
摘要:以下是带事件数据的事件:[代码]上面的多了一个RequestKeyEventArgs类,此类继承了EventArgs类,就是通过这个类传递了事件中的数据下面是不带事件数据的事件:[代码]
阅读全文
摘要:out的使用————————————————————————————————————————————————— class Program { static void Main(string[] args) { string tmp; //先声明,但不初始化 User _user=new User(); _user.Name(out tmp); //调用Name方法 Console.WriteLine("{0}",tmp); //这时tmp的值为“在这里面赋值了” Console.ReadKey(true); }} class User { publicvo
阅读全文
摘要:各进制之间整数转换十进制向任意进制转换(包括小数)[代码]
阅读全文
摘要:在c#中执行sql语句时传递参数的小经验1、直接写入法: 例如: int Id =1; string Name="lui"; cmd.CommandText="insert into TUserLogin values("+Id+",'"+Name+"')"; 因为Id是数值,所以在传递的时候只需要在sql字符串中用"+Id+"即可实现,而 Name是字符串,所以在传递的时候还需要在"+Name+"两边各加一个单引号(')来 实现;2、给命令对象添加参
阅读全文
摘要:注记:Pascal 大小写形式——所有单词第一个字母大写,其他字母小写。Camel 大小写形式——除了第一个单词,所有单词第一个字母大写,其他字母小写。类名使用Pascal大小写形式 public class HelloWorld{…}方法使用Pascal大小写形式 public class HelloWorld{void SayHel...
阅读全文
摘要:一、代码格式在编写代码的过程中,代码格式方面建议遵守一下规则。(1)通常情况下,代码缩进为4个空格,这是Visual Studio 2005的默认设置。(2)在代码中垂直对齐同一层次的左括号和右括号。(3)为了防止在阅读代码时左右滚动源代码编辑器,每行代码或注释不得超过一个显示屏。(4)当一行被分为几行时,需要将串联运算符放在每一行的末尾。(5)每一行上放置的语句避免超过一条。(6)在大多数运算符之前和之后使用空格,这样做是不会改变代码意图的,却可以使代码更加容易阅读。(7)将大的复杂代码节分为较小的、易于理解的模块。(8)编写SQL语句时,关键字全部使用大写,数据库元素(如表、列和视图)使用
阅读全文