2011年4月26日

写C#自定义控件的心得

摘要: 使用C#也有一段时间了,但从未自已设计过自定义控件,刚刚完成了一个自定义控件的设计,觉得有一些技巧和知识,可以做一个总结. 有些东西,从MSDN中很不容易找到,比如对一些属性的描述设定.这里可以为此做一些汇兑. 我设计了一个平滑进度条控件,这在网上很容易找到一些现成的.不过,为了学习控件的设计,我还是自己写了一个. 这个控件继承自UserControl类.原理很简单,就是用刷子往一定的区域里面填充颜色. 设计控件当然要有一些属性,进度条设计中最主要的属性就是最小值,最大值及当前值.有了属性在VS设计器中也要有所反映,就需要对这个属性进行描述. 就拿最小值这个属性来说吧.在VS设计器选中这个属性 阅读全文

posted @ 2011-04-26 14:46 seoxs 阅读(398) 评论(0) 推荐(1) 编辑

c# equals与==的区别

摘要: 对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于string 以外的引用类型,如果两个对象引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。 ==操作比较的是两个变量的值是否相等。 equals()方法比较的是两个对象的内容是否一致.equals也就是比较引用类型是否是对同一个对象的引用。 对于值类型的比较,这里就不做描述了,下面讨论引用类型的比较:首先我们看一段程序usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSyste 阅读全文

posted @ 2011-04-26 14:41 seoxs 阅读(374) 评论(0) 推荐(0) 编辑

C#数据库事务原理及实践

摘要: 什么是数据库事务 数据库事务是指作为单个逻辑工作单元执行的一系列操作。设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作: · 更新客户所购商品的库存信息 · 保存客户付款信息--可能包括与银行系统的交互 · 生成订单并且保存到数据库中 · 更新用户相关信息,例如购物数量等等 正常的情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新。但是,如果在这一系列过程中任何一个环节出了差错,例如在更新商品库存信息时发生异常、该顾客银行帐户存款不足等,都将导致交易失败。一旦交易失败,数据库中所有信息都必须保持交易前的状 阅读全文

posted @ 2011-04-26 13:30 seoxs 阅读(269) 评论(1) 推荐(0) 编辑

c# 获取网页源码

摘要: C#获取指定网页HTML原代码可使用WebClientWebRequestHttpWebRequest 三种方式来实现。当然也可使用webBrowse!在此就不研究webBrowse如何获取了。WebClientview sourceprint?private string GetWebClient(string url) { string strHTML = ""; WebClient myWebClient = new WebClient(); Stream myStream = myWebClient.OpenRead(url); StreamReader sr = 阅读全文

posted @ 2011-04-26 13:28 seoxs 阅读(469) 评论(1) 推荐(2) 编辑

为你的常量选择readonly而不是const

摘要: 对于常量,C#里有两个不同的版本:运行时常量和编译时常量。因为他们有不同的表现行为,所以当你使用不当时,将会损伤程序性能或者出现错误。两害相权取其轻,当我们不得不选择一个的时候,我们宁可选择一个运行慢一点但正确的那一个,而不是运行快一点但有错误的那个。基于这个理由,你应该选择运行时常量而不是编译时常量(译注:这里隐藏的说明了编译时常量效率更高,但可能会有错误)。编译时常量更快更直接,但在可维护性上远不及运行时常量。保留编译时常量是为了满足那些对性能要求克刻,且随着程序运行时间的过去,其值永远不发生改变的常量使用的(译注:这说明编译时常量是可以不被C#采用的,但考虑到性能问题,还是做了保留)。你 阅读全文

posted @ 2011-04-26 09:25 seoxs 阅读(260) 评论(0) 推荐(0) 编辑

C#不为人知的秘密-缓冲区溢出

摘要: 开场白 各位朋友们,当你们看到网上传播关于微软windows、IE对黑客利用“缓冲区溢出”、0day漏洞攻击的新闻,是否有过自己也想试试身手,可惜无从下手的感慨?本文将完全使用C#语言,探索那些不为人知的秘密。 1.本文讲述在C#中利用堆栈缓冲区溢出动态修改内存,达到改变应用程序执行流程的目的。 2.如果你是高手,请指出本文的不足。 3.为了让本文通俗易懂,代码将极尽精简。 现在开始 我们知道,当数组下标越界时,.NET会自动抛出StackOverflowException,这样便让我们可以安全的读写内存,那么我们有没有逾越这个自动检测的屏障,达到我们非常操作的目的呢?答案是有的,而且我们可以 阅读全文

posted @ 2011-04-26 09:21 seoxs 阅读(505) 评论(2) 推荐(0) 编辑

C#关键字区别之ref和out

摘要: 问题:为什么c#中要有ref和out?(而java中没有)需求假设:现需要通过一个叫Swap的方法交换a,b两个变量的值。交换前a=1,b=2,断言:交换后a=2,b=1。现编码如下:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1classProgram2{3staticvoidMain(string[]args)4{5inta=1;6intb=2;7Console.WriteLine("交换前\ta={0}\tb={1}\t& 阅读全文

posted @ 2011-04-26 09:09 seoxs 阅读(292) 评论(1) 推荐(1) 编辑

C#数组

摘要: C# 数组从零开始建立索引,即数组索引从零开始。C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似。但还有一些差异应引起注意。声明数组时,方括号 ([]) 必须跟在类型后面,而不是标识符后面。在 C# 中,将方括号放在标识符后是不合法的语法。int[] table; // not int table[]; 另一细节是,数组的大小不是其类型的一部分,而在 C 语言中它却是数组类型的一部分。这使您可以声明一个数组并向它分配 int 对象的任意数组,而不管数组长度如何。int[] numbers; // declare numbers as an int array of any size 阅读全文

posted @ 2011-04-26 09:04 seoxs 阅读(271) 评论(0) 推荐(0) 编辑

导航