• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






( ^_^ )程序员

 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

随笔分类 -  C# .NET

 
C#基础系列:实现自己的ORM(MiniORM的测试代码)
摘要:【转 http://blog.csdn.net/RonoTian/article/details/2912349】看到有同学反馈,说MiniORM代码有Bug,也不知道怎么用,所以今天我就写了些测试代码。希望能够给点帮助。 同时也发现了两Bug,一并罗列出: 1、MiniORM.PubFuncs.GetObjectType()函数:publicstatic Type GetObjectType(string assemblyname, string namespacename, string classname){ Type objType = (Type)_HashObjectType[as 阅读全文
posted @ 2013-01-11 17:31 修身、律己
C#基础系列:实现自己的ORM(反射以及Attribute在ORM中的应用)
摘要:【转 http://blog.csdn.net/ronotian/article/details/2900714】反射以及Attribute在ORM中的应用一、 反射 什么是反射? 简单点吧,反射就是在运行时动态获取对象信息的方法,比如运行时知道对象有哪些属性,方法,委托等等等等。 反射有什么用呢? 反射不但让你在运行是获取对象的信息,还提供运行时动态调用对象方法以及动态设置、获取属性等的能力。 反射在ORM中有什么用呢? 我这里所讨论的ORM实现是通过自定义Attribute的方式进行映射规则的描述的。但是我们并不知道具体哪个对象需要对应哪个表,并且这些对象是独立于我们的ORM框架的,所以我 阅读全文
posted @ 2013-01-11 17:29 修身、律己 阅读(175) 评论(0) 推荐(0)
C#基础系列:实现自己的ORM(ORM的基础概念)
摘要:【转 http://blog.csdn.net/ronotian/article/details/2900698】ORM(O/R Mappping对象关系映射)的基础概念在我们的系统中,存在大量的需要进行持久化存储的对象,这些对象可能是各种各样的业务单据,也可能是我们的系统配置信息等。另外一些属于内存中使用而不需要进行持久化存储的对象,不属于我们的讨论范围。而在支持对象序列化的语言比如C#,Java中,我们可以将这些对象序列化到磁盘文件或者直接保存到关系数据库中。其中关系数据库是我们最主要也是最安全的选择。 在对数据库中的业务数据进行各种操作的时候我们发现,我们进行的大量的Insert、Upd 阅读全文
posted @ 2013-01-11 17:26 修身、律己
C#基础系列:实现自己的ORM(构造我自己的ORM)
摘要:【转 http://blog.csdn.net/ronotian/article/details/2900734】构造我自己的ORM通过前面两章的描述,我相信很多朋友都已经明白我了下面将要讨论到的ORM的实现方法了,那就是根据自定义Attribute来定义O/R Mapping规则,然后通过反射来动态获取此规则,动态构造SQL语句。 由于这个小东西(ORM)出生在深圳,所以我想来想去,她应该有个深圳的名字,所以我就叫她“MiniORM”。不知道各位认为如何? MiniORM采用的是ONE_INHERIT_TREE_ONE_CLASS(一个继承树对应于一个表)的结构,虽然这种结构容易导致数据冗余 阅读全文
posted @ 2013-01-11 17:22 修身、律己
C#基础系列:开发自己的窗体设计器(在容器上拖动鼠标增加控件)
摘要:【转 http://blog.csdn.net/ronotian/article/details/3159595】本文我们实现一个简单的通过拖动鼠标来增加控件的方法。在我们使用vs2005来开发WinForm应用程序的时候,我们通过选择左边“工具箱”中的某个控件,然后在我们自己的窗体上通过拖动鼠标,一个我们需要的控件就出现了,觉得很爽!其实vs2005中已经有这方面的组件,我们通过简单的代码就可以直接使用,这个你可以用“窗体设计器”Google一下,已经有人做了这方面的介绍。所以我要说的是,难道除了使用vs2005中提供的这个标准组件,就不能自己弄出一个来?即使不够强大,但是最终都是自己折腾出 阅读全文
posted @ 2013-01-11 17:19 修身、律己
C#基础系列:开发自己的窗体设计器(实现控件的选择)
摘要:【转 http://blog.csdn.net/ronotian/article/details/3165816】所谓控件的选择,就是在设计器上某个控件被选中或者控件获得焦点(通过Tab调整控件焦点)的时候,在控件的四周显示出调整手柄。如下图:如上,通过控件的调整手柄,我们可以调整控件的宽度和高度。而实现这个调整手柄的关键点其实得益于vs2005控件的灵活性。因为这8个正方形的调整手柄其实就是8个控件。所以我们本文的重点如下:1、开发自定义的调整手柄控件,也就是这正方形控件;2、组合这8个调整手柄控件,目标是使设计器上的控件与调整手柄完全解耦,调整手柄能够不做任何的修改就可以应用于所有的控件; 阅读全文
posted @ 2013-01-11 17:16 修身、律己
C#基础系列:开发自己的窗体设计器(实现控件的拖动)
摘要:【转 http://blog.csdn.net/ronotian/article/details/3168178】控件移动的关键点就是需要设计一个独立于任何控件的类(UIMoveKnob)来控制控件的移动。我这里实现的方法只针对一个控件,如果需要同时选择多个控件,然后同时移动的话,你需要修改这个类,这里是有点难于控制,我使用的方法严重耦合,所以只在这里给出移动一个控件的办法,具体移动过个控件的方法请各位讨论。要移动某个选定的控件,我们需要实现控件的:MouseDownMouseMoveMouseUp这3个事件。在MouseDown的时候,记录鼠标点击的开始位置,并设置开始移动标志为True;在 阅读全文
posted @ 2013-01-11 17:05 修身、律己
C#基础系列:开发自己的窗体设计器(PropertyGrid显示中文属性名)
摘要:【转 http://blog.csdn.net/ronotian/article/details/3183907】既然是一个窗体设计器,那就应该能够设置控件的属性,设置属性最好的当然是PropertyGrid了,我们仅仅需要使用一个PropertyGrid.SelectedObject = Control就可以搞定,让PropertyGrid显示Control的所有属性。可是这里显示的属性名是英文的。对于我们开发人员来说这无可厚非,我们也乐于接受。并且让PropertyGrid显示中文属性名,这对于我们开发人员的使用来说显得多此一举。可是,对于我这种类型的一个应用工具,英文属性名对于很多客户来 阅读全文
posted @ 2013-01-11 17:03 修身、律己
C#实现ORM的四种方案
摘要:【转 http://www.csharpwin.com/csharpspace/10432r8685.shtml】正如ORM名称所指示的,实现ORM的关键点在于解决“对象--关系”之间的映射,例如,如何将一个DataRow转换为一个Entity Object,又如何将一个对某Entity Object的操作映射到一个IDbCommand,等等。我们以DataRabbit为例,在DataRabbit中,使用IORMapping接口来抽象这些映射:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.C 阅读全文
posted @ 2013-01-11 16:57 修身、律己
C# 3.0下有限状态机的一种优雅的实现【转】
摘要:http://www.cnblogs.com/TianFang/archive/2007/12/27/1017665.htmlC# 3.0下有限状态机的一种优雅的实现实现状态机有多种模式,其中最灵活而强大的方式是通过迁移表来实现,该方式的缺点之一是需要编写大量小块代码去支持迁移表。而在C#3.0中,可以以一种非常优雅的方式实现。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace StateMachine{class Program{static void Main 阅读全文
posted @ 2012-11-15 15:25 修身、律己
HashTable与Dictionary<TKey, TValue> 【转】
摘要:泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的装箱和拆箱。很多非泛型集合类都有对应的泛型集合类,我觉得最好还是养成用泛型集合类的好习惯,他不但性能上好而且 功能上要比非泛型类更齐全。下面是常用的非泛型集合类以及对应的泛型集合类: 非泛型集合类泛型集合类ArrayListList<T>HashTableDIctionary<T>QueueQueue<T>StackStack<T>SortedLis 阅读全文
posted @ 2012-11-09 10:44 修身、律己 阅读(200) 评论(0) 推荐(0)
UML建模【转http://www.cnblogs.com/gaojun/archive/2010/04/27/1721802.html】
摘要:本章使用一个简单的例子对UML中所使用的概念和视图进行初览。本章的目的是要将高层UML概念组织成一系列较小的视图和图表来可视化说明这些概念,说明如何用各种不同的概念来描述一个系统以及如何将各种视图组织在一起。概括性的说明不可能面面俱到,其中省略了许多概念。要想得到更详细的说明,可参见下一章对UML各视图的说明和本书大全部分的有关细节。本章使用的例子是计算机管理的戏院售票系统。这是一个精心设计的例子,目的是用少量篇幅来强调说明UML的各个组件。这是一个经过有意简化的例子,忽略了有关细节。除非进行大量的反复说明,否则一个实际系统的完整模型不可能用这么少的篇幅来对UML中使用的每种组件进行介绍。1. 阅读全文
posted @ 2012-11-07 10:14 修身、律己
VS编程快捷键 【转自http://www.cnblogs.com/NobitaSoft/articles/2319999.html】
摘要:VS2005快捷键CTRL+SHIFT+B生成解决方案 CTRL+F7生成编译 CTRL+O打开文件 CTRL+SHIFT+O打开项目 CTRL+SHIFT+C显示类视图窗口 F4显示属性窗口 SHIFT+F4显示项目属性窗口 CTRL+SHIFT+E显示资源视图 F12转到定义 CTRL+F12转到声明 CTRL+ALT+J对象浏览 CTRL+ALT+F1帮助目录 CTRL+F1动态帮助 F1帮助 SHIFT+F1当前窗口帮助 CTRL+ALT+F3帮助-搜索 SHIFT+ALT+ENTER全屏显示 CTRL+-向后定位 CTRL+SHIFT+-向前定位 CTRL+F4关闭文档窗口 CTRL 阅读全文
posted @ 2012-11-06 13:02 修身、律己
C#中的委托和事件(续)【转自http://www.cnblogs.com/JimmyZhang/archive/2008/08/22/1274342.html】
摘要:源码下载:http://www.tracefact.net/SourceCode/MoreDelegate.rarC#中的委托和事件(续)引言如果你看过了 C#中的委托和事件 一文,我想你对委托和事件已经有了一个基本的认识。但那些远不是委托和事件的全部内容,还有很多的地方没有涉及。本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器、异常处理、超时处理和异步方法调用等内容。为什么要使用事件而不是委托变量?在 C#中的委托和事件 中,我提出了两个为什么在类型中使用事件向外部提供方法注册,而不是直接使用委托变量的原因。主要是从封装性和易用性上去考虑,但是还漏掉了一点,事 阅读全文
posted @ 2012-10-30 13:13 修身、律己
C#中的泛型【转自http://www.cnblogs.com/JimmyZhang/archive/2008/12/17/1356727.html】
摘要:.Net 1.1版本最受诟病的一个缺陷就是没有提供对泛型的支持。通过使用泛型,我们可以极大地提高代码的重用度,同时还可以获得强类型的支持,避免了隐式的装箱、拆箱,在一定程度上提升了应用程序的性能。本文将系统地为大家讨论泛型,我们先从理解泛型开始。1.1 理解泛型1.1.1 为什么要有泛型?我想不论大家通过什么方式进入了计算机程序设计这个行业,都免不了要面对数据结构和算法这个话题。因为它是计算机科学的一门基础学科,往往越是底层的部分,对于数据结构或者算法的时间效率和空间效率的要求就越高。比如说,当你在一个集合类型(例如ArrayList)的实例上调用Sort()方法对它进行排序时,.Net框架在 阅读全文
posted @ 2012-10-30 13:11 修身、律己
浅谈C#中数据类型转换 【转自http://www.cnblogs.com/liyingyi/archive/2005/12/30/308165.html】
摘要:类型转换 显示转换 隐式转换 用户自定义转换(1) 隐式转换:一般是低类型向高类型转化,能够保证值不发生变化。 隐式数值转换: 从 sbyte 到 short、int、long、float、double 或 decimal。 从 byte 到 short、ushort、int、uint、long、ulong、float double 或 decimal。 从 short 到 int、long、float、double 或 decimal。 从 ushort 到 int、uint、long、ulong、float、double 或 decimal。 从 int 到 long、float、doub 阅读全文
posted @ 2012-10-30 13:10 修身、律己
浅谈C#中的枚举 【转自http://www.cnblogs.com/liyingyi/archive/2005/12/28/306772.html】
摘要:枚举类型是一种的值类型,它用于声明一组命名的常数。(1)枚举的声明:枚举声明用于声明新的枚举类型。访问修辞符enum 枚举名:基础类型{枚举成员 }基础类型必须能够表示该枚举中定义的所有枚举数值。枚举声明可以显式地声明 byte、sbyte、short、ushort、int、uint、long 或 ulong 类型作为对应的基础类型。没有显式地声明基础类型的枚举声明意味着所对应的基础类型是 int。(2)枚举成员枚举成员是该枚举类型的命名常数。任意两个枚举成员不能具有相同的名称。每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类型。每个枚举成员的常数值必须在该枚举的基础类型的范围之内 阅读全文
posted @ 2012-10-30 13:09 修身、律己
C# 中的委托和事件[转自http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html]
摘要:PDF 浏览:http://www.tracefact.net/Document/Delegates-and-Events-in-CSharp.pdf文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错,解决办法是显式的创建一个委托类型的实例(委托变量)。例如:委托类型 委托实例 = new 委托类型(方法名); 欢迎浏览本文的后续文章: C#中的委托和事件(续)源码下载:http://www.tracefact.net/SourceCode/Delegates-and 阅读全文
posted @ 2012-10-30 10:54 修身、律己