摘要:
面向对象有几个原则:开闭原则(Open Closed Principal,OCP)、里氏代换原则(Liskov Substitution Principle,LSP)、依赖倒转原则(Dependency Inversion Principle,DIP)、接口隔离原则(Interfce Segregation Principle,ISP)、合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)、最小知识原则(Principle of Least Knowledge,PLK,也叫迪米特法则)。开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。其 阅读全文
摘要:
我们在简单工厂模式中,将实例化对象的工作推迟到了专门负责创建对象的工厂类中,这样,在我们事先预知的情况下,可以根据我们的需要动态创建产品类。但是,我们的预知是有限的,客户的变化可能是无限的。所以,就出现了问题,一旦客户的变化超越了我们的预知,我们就必须修改我们的源代码了。这是设计模式所不允许的,怎么办呢?工厂方法模式正是解决此类问题的。定义工厂方法模式又称为工厂模式,也叫虚拟构造器(VirtualConstructor)模式或者多态工厂模式(PolymorphicFactory),在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到 阅读全文
摘要:
简单工厂模式是类的创建模式,又叫做静态工厂方法模式。简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些。因为它至少不是Gof23种设计模式之一。但它在实际的编程中经常被用到,而且思想也非常简单,可以说是工厂方法模式的一个引导就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。一般涉及到三种角色:工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的类实现。抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。具体产品角色:工厂方法模式所创 阅读全文
摘要:
对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。[3]如何保证一个类只有一个实例并且这个实例易于被访 阅读全文
摘要:
NHibernate采用非侵入式的方式进行对象-关系映射,从而成就了其轻量级ORM技术的美名,这一点相信成为很多架构师钟爱他的重要理由。NHibernate技术架构如下图所示:NHibernate的使用大致可以分为配置信息、编写映射文件和持久化数据几个步骤:一、配置信息NHibernate需要对配置文件作以下配置方可使用:<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="hibe 阅读全文
摘要:
泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用在集合和在集合上运行的方法中。.NET Framework 2.0 版类库提供一个新的命名空间System.Collections.Generic,其中包含几个新的基于泛型的集合类。建议面向 2.0 版的所有应用程序都使用新的泛型集合类,而不要使用旧的非泛型集合类,如ArrayList。有关更多信息,请参见.NET Framework 类库中的泛型(C# 编程指南)。当然,也可以创建自定义泛型类型和方法,以提供自己的通用解决方案,设计类型安全的高效模式。下面的代码示例演示一个用于演示用途的简单泛型链 阅读全文
摘要:
定义带索引器和访问器的接口public interface ISampleInterface{ // Property declaration: string Name { get; set; }}由于接口本身特点,接口属性的访问器不具有体。因此,访问器的用途是指示属性是否为读写、只读或只写。在此例中,接口IEmployee具有读写属性Name和只读属性Counter。Employee类实现IEmployee接口并使用这两种属性。程序读取新雇员的姓名和雇员的当前编号,并显示雇员姓名和计算所得的雇员编号。可以使用属性的完全限定名,它引用声明成员... 阅读全文
摘要:
WPF的MVVM模型的精髓之一就是数据绑定,他能做的比想象的还多。以一个简单的按钮为实例:这是一个录像的按钮,单机后开始录像,途中可以暂停,暂停效果如下再次单机可以还原为播放状态。若要在将客户端与数据源进行绑定时发出更改通知,则绑定类型应具有下列任一功能:实现INotifyPropertyChanged接口(首选)。为绑定类型的每个属性提供更改事件。参考阅读msdn:http://msdn.microsoft.com/zh-cn/library/ms133020.aspxxaml代码:1 <Controls:Tile x:Name="Start_Stop_Record_Btn& 阅读全文
摘要:
一、Canvas这个容器能够对元素做准确的定位,但同时也是其创建的页面不够灵活。二、StackPanel最大的优点是:他会顺序的对他的子元素进行排列显示。(没有任何附加属性)要注意的是:他有两个属性:Orientation和FlowDirection从而可以设置子元素的排列显示形式Orientation的值设为Horizontal则为水平排列,设为Vertical则垂直排列。FlowDirection的值设为RightToLeft,则从右向左排列。设为LeftToRight,则从左向右排列。三、WrapPanel类似于StackPanel,具有StackPanel的属性和功能(也具有FlowD 阅读全文
摘要:
文章出处:http://www.cnblogs.com/ArmyShen/archive/2012/08/27/2659405.html索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的。索引器和数组比较:(1)索引器的索引值(Index)类型不受限制(2)索引器允许重载(3)索引器不是一个变量索引器和属性的不同点(1)属性以名称来标识,索引器以函数形式标识(2)索引器可以被重载,属性不可以(3)索引器不能声明为static,属性可以一个简单的索引器例子using System;using System.Collections;publi 阅读全文
摘要:
参考:http://www.cnblogs.com/zhouyinhui/archive/2008/01/27/1055261.html第一次做WPF项目,要用到多线程,委托,自定义事件等技术。看了几篇网友技术文章觉得不错,做下笔记。在多线程编程中,我们经常会需要在子线程中访问主线程的内容,特别是更改主窗体的UI界面内容,如果直接访问跨线程资源,系统就会报线程访问错误.查了MSDN发现由于这样的做法是线程不安全的。在WinForm中窗体类提供了Invoke方法以从子线程中访问主线程资源.在WPF中Window类并没有Invoke方法,但是WPF提供了专门负责线程调度工作的Window.Disp 阅读全文
摘要:
阅读全文
![](http://www.oschina.net/img/logo/extjs.gif?t=1377425907000)
摘要:
JavaScript中的Function对象是函数,函数的用途分为3类:一、作为普通逻辑代码容器;function multiply(x, y) { return x * y;}创建函数实例的方式有3种。第一种是声明式,即像声明变量一样,将通过function(){}标识符创建的匿名函数直接赋值给变量,以该变量作为调用时的函数名称:var multiply = function(x, y) { return x * y;}第二种是定义式,即以function关键字后跟函数名称及(){}来直接定义命名函数:function multiply(x, y) { return x * y;}... 阅读全文
摘要:
一个恐怖的例子:注入式攻击的详细解释SQL下面我们将以一个简单的用户登陆为例,结合代码详细解释一下SQL注入式攻击,与及他的防范措施。对于一个简单的用户登陆可能的代码如下:try{ string strUserName = this.txtUserName.Text; string strPwd = this.txtPwd.Text; string strSql = "select * from userinfo where UserName='" + strUserName + "' and Password='" + strP 阅读全文
摘要:
阅读全文
![](http://www.oschina.net/img/logo/npoi.gif?t=1377425908000)
摘要:
阅读全文
![](http://www.oschina.net/img/logo/extjs.gif?t=1377425907000)
摘要:
阅读全文
![](http://www.oschina.net/img/logo/extjs.gif?t=1377425907000)
摘要:
学习JavaScript的最佳方法使用说明:将鼠标移到右侧窗口里,滑动鼠标滚轮可以调整文字垂直位置;或者按住Ctrl键,再按住鼠标左键,上下拖拽右侧文字的垂直位置。 登陆用户可以选取左侧窗口内的文字,对选中的文字进行批注。 ╳使用帮助 返回文章页面 学习JavaScript的最佳方法 译者:雕工天狼 The Best Way to Learn JavaScript 学习JavaScript的最佳方法Andrew Burgess on Sep 21st 2011 Andrew Burgess 2011年9月21日Learning something new is scary. For m... 阅读全文
摘要:
本文大部分内容转载自:http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:1、扬声器会开始发出语音,告诉你水的温度;2、液晶屏也会改变水温的显示,来提示水已经快烧开了。现在我们需要写个程序来模拟这个烧水的过程,我们将定义一个类来代表热水器,我们管它叫:Heater,它有代表水温的字段,叫做temperature;当然,还有必不可少的给水加热方法BoilWater(),一个发出语音警报的方法MakeAlert(),一个显示水温的方法,ShowMsg()。O 阅读全文
摘要:
经典的关于委托的详解 http://www.cnblogs.com/jimmyzhang/archive/2007/09/23/903360.html这里从网上找到的的实例,适合新手test下:委托(delegate)是一种引用类型,我们在处理他的时候要当作类来看待而不是方法,说白了委托就是对方法或者方法列表的引用,调用一个委托实例就好像是调用c++中的指针一样,他封装了对制定方法的引用,或者说委托起到的是桥梁的作用,实例后的委托对象会将给定的参数传递给他所回调的方法,并去执行方法。//声明一个委托 delegate int myDelegateHandler(int a, int b)... 阅读全文
摘要:
(一)ArrayList类:使用大小可按需动态增加的数组。class Program { static void Main(string[] args) { ArrayList al = new ArrayList(); al.Add(100);//单个添加 foreach (int number in new int[6] { 9, 3, 7, 2, 4, 8 }) { al.Add(number);//集体添加方法一 ... 阅读全文
摘要:
1 /************************************************** 2 名称:iMetro原作者:崎仔 6 **************************************************/ 7 8 /************************************************** 9 公共样式 10 **************************************************/ 11 #EntryTag { 12 margin-top: 20px; 13 ... 阅读全文
摘要:
如果直接select * into 目的数据库名.dbo.目的表名 from 原表名复制的话,可以完整的复制表,但是有一个缺陷就是,表的主键和索引没了。想要完整复制一张表,可以在sql server如下操作:1.使用查询分析器或企业管理器生成要复制表的较完整的脚本。所谓完整,要在脚本选项中设置包括约束、自增加等所需脚本。2.复制脚本到存储过程或查询分析器,更改表名和约束名为新表名和约束名。3.执行脚本。4.使用INSERT INTO NEWTABLENAME SELECT * FROM OLDTABLENAME 将数据添加到新表.一般脚本生成如下:ifexists(select*fromdbo 阅读全文
摘要:
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了1.INSERT INTO SELECT语句语句形式为:Insert into Table2(field1,field2,...) select val 阅读全文
摘要:
Distinct的作用是用于从指定集合中消除重复的元组,经常和count搭档工作,语法如下COUNT( { [ ALL | DISTINCT ] expression ] | * } ) 这时,可能会碰到如下情况,你想统计同时有多列字段重复的数目,你可能会立马想到如下方法:selectcount( distinct col1 , col2 , col3 , .......) from table但是,这样是不允许的,因为count是不能统计多个字段的,虽然distinct是可行的。有种比较直接的方法就是把消除重复后在统计查询:select count(*) from (select disti 阅读全文
摘要:
今天遇到用left join时候发现查询出来的结果比预期的少了很多?不知道为什么,上网一查,原来如此!在使用leftjoin时,on和where条件的区别如下:1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。可以理解为,左表记录保留,右表不满足条件的填写为null2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。假设有两张表:表1 tab1:id size1 102 203 30表2 tab2:size name10 AAA20 BBB20 CC 阅读全文
摘要:
(1)inner join、left join、right join 之间的关系INNER JOIN只要在这两个表的公共字段之中有相符值,内部联接将组合两个表中的记录。注意:在一个 INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOINleft join它的全称为左外连接(left outer join),是外连接的一种,连接通常可以在select语句的from子句或where子句中建立,它是以联接关系中的左外的表为基准,右边的表如果没有数据,则以空值NULL填充。right j 阅读全文
摘要:
发现T-SQL还是可以像c语言的,只不过是在某些情况下。一个十六进制转十进制的例子:create function Hex_to_Dec(@Hex_num varchar(20))
returns int
as
begin declare @m int declare @return_value int set @m=1 set @return_value=0 while @m<=len(@Hex_num) begin set @return_value=@return_value+convert(int, ( case when substring(@Hex... 阅读全文
摘要:
参考了网友的资料实现XMLhelp类,这里主要讨论生成xml文件和对xml文件添加需要的节点namespace XMLtool
{ public class XMLHelp { #region 公共变量 XmlDocument xmldoc; XmlNode xmlnode; XmlElement xmlelem; #endregion #region 创建Xml文档 /// <summary> /// 创建一个带有根节点的Xml文件 ... 阅读全文
摘要:
++++++++++++++++++++++++++++++++++++++++++本文系本站原创,欢迎转载! 转载请注明出处:http://blog.csdn.net/mr_raptor/article/details/7227260++++++++++++++++++++++++++++++++++++++++++XAML是一种声明性标记语言。XAML 简化了为 .NET Framework 应用程序创建 UI 的过程。您可以在声明性 XAML 标记中创建可见的 UI 元素,然后使用代码隐藏文件(通过分部类定义与标记相连接)将 UI 定义与运行时逻辑相分离。XAML 直接以程序集中定义的一 阅读全文
摘要:
一、冒泡排序依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,直至最终完成排序。冒泡排序是稳定的。算法时间复杂度是O(n ^2)。public void BubbleSort(int[] array)
{ int length = array.Length; for (int i = 0; i <= length - 1; i++) { for (int j = length - 1; j > i; j--) ... 阅读全文