成都网站建设
|
域名注册
|
虚拟主机
|
网站制作
|
网站案例
|
网站优化
|
网站推广
|
企业邮局
|
服务器租用
|
广告设计
首页
服务器租用
企业邮箱
虚拟主机
网站程序
营销推广
网站建设
域名注册
前端开发
网站备案
网站程序
java教程
asp程序
asp.net程序
vb编程
php程序
C#程序
服务器租用
web服务器
FTP服务器
服务器托管
服务器租用
vps主机服务器
云主机服务器
网站解决方案
服务器机房
企业邮箱
企业邮箱设置
企业邮箱优势
邮箱其他问题
邮箱功能讲解
邮箱收发问题
虚拟主机
主机管理
主机购买
数据库
主机续费升级
FTP上传
营销推广
seo优化
网站推广
搜索引擎
免费资源
网站建设
网站方案
网站改版
网页设计
网站维护
网站策划
网站制作
域名注册
域名转入\转出
英文域名
通用网址
中文域名
域名解析
无线网址
域名知识及服务
前端开发
html
jQuery
JavaScript教程
css
div+css
json教程
bootstrap教程
XML教程
ajax教程
网站备案
备案资料下载
备案流程指南
各省备案要求
备案常见问题
移动互联网
app应用开发
wap手机网站
微网站
当前位置:
创新互联
>>
常见问题
>>
网站程序
>>
C#程序
>>
C#基本技巧总结
C#基本技巧总结
作者:创新互联 文章来源:网站程序部 点击数:
更新时间:2009-11-10
1.
C#
基本技巧之如果可能尽量使用接口来编程
.NET框架包括类和接口,在编写程序的时候,你可能知道正在用.NET的哪个类。然而,在这种情况下如果你用.NET支持的接口而不是它的类来编程时,代码会变得更加稳定、可用性会更高。请分析下面的代码:
privatevoidLoadList(object[]items,ListBoxl) { for(inti=0;i<items.Length;i++) l.Items.Add(items[i].ToString()); } 这个函数从一个可为任何对象的数组中加载ListBox,这段代码被限定为只能使用数组。假想过些时候你发现那些对象存在
数据库
中,或别的集合中。那么你需要修改程序来使用不同的集合类型。如果你用ICollection接口来写那段程序,你就不用修改那段程序了,对于任何实现ICollection接口的类型它都能很好的工作:
privatevoidLoadList(ICollectionitems,ListBoxl) { foreach(objectoinitems) l.Items.Add(o.ToString()); } ICollection被数组和所有System.Collection中的集合实现。此外,多维数组也支持ICollection接口。如果那还不够的话,
数据库
.NET类同样支持ICollection接口。用接口写的这个函数不用需改就可以才许多中情况下使用。
2.
C#
基本技巧之使用属性代替原始数据
因为属性已经成为语言本身的元素,所以声明数据元素时它的作用域等级没有必要大于private。因为代码本身会把属性看成数据元素,你并没有失去使用简单数据类型的便利性 。相反它会使你的代码更加灵活功能更加强大。属性使你的数据元素封装性更好。属性可以让你使用lazy evaluation来返回数据。lazy evaluation的意思是当用户请求时才计算它的值,而不是一直保留着它。
最后,属性可以是virtual也可以是abstract。你也可以在接口中定义属性。
这里还有维护方面的因素应当注意:尽管操作两者的方法是一样的,但是你把一个数据元素变成属性,那么原先客户端的程序便不能访问服务端的新版本程序了。实际上对于在Web service中你想实现序列化的值你可以把它们变成属性来使用:
privateintTheMonth=0; [XmlAttribute("Month")] publicintMonth { get{ returnTheMonth; } set{ TheMonth=value; } } 简单通过属性就可以使你的所有数据元素私有化。
3.
C#
基本技巧之在Producer/Consumer 的Idiom中使用Delegate
当你生成一个实现producer idiom类的时候,使用deletate来通知consumer。这种方法相对于用接口更加灵活。Delegate是多点传送的,所以不用加额外的代码你就何以支持多用户。相对于用接口这样做可使类之间的耦合性降低。
下面的类处理键盘输入并把它传给所有的registered listeners:
publicclassKeyboardProcessor
{ privateOnGetLinetheFunc=null;
publicOnGetLineOnGetLineCallback{
get{
returntheFunc;
}
set{ theFunc=value;
} }
publicvoidRun(){ //Readinput. //Ifthereisanylisteners,publish: strings; do
{ s=Console.ReadLine(); if(s.Length==0) break; if(theFunc!=null){ System.Delegate[] funcs=theFunc.GetInvocationList(); foreach(OnGetLinefinfuncs){ try{ f(s); }catch(Exceptione){ Console.WriteLine ("CaughtException:{0}",e.Message); } } } }while(true); } 任何数目的listeners都可注册到producer,它们所要做的只是提供一个特定的函数:deletate。
4.
C#
基本技巧之注意初始化顺序
C#
中对于一些变量声明加入了initializer的概念。它们在构造函数之前被执行,实际上变量在基类的构造函数执行前之前被初始化。
所以,在初始化变量的时候不要用基类中的数据,因为它们还没有被构造。
浅析C#中三层架构的实现
:上一篇
C#中ref和out的使用小结
:下一篇
C#程序相关文章
浅析C#中三层架构的实现
C#可用于登录验证码的四位随机数生成方法
C#语言的泛型使用方法
C#语言开发时的一些定制属性介绍
C#dataGrid列定制
C#中的“装箱”与“拆箱”
C#构造器和C++ 构造器是否相同?
C#串口操作
解析关于实例化顺序的C#面试题
专注网站建设、网页设计、网站制作、企业网站建设——创新互联
服务电话:028-86922220 13518219792 公司地址:成都市太升南路288号锦天国际A幢10楼2号
企业邮箱:
service@cdxwcx.com
版权所有:成都创新互联科技有限公司 蜀ICP备13010860号
成都网站建设