木子屋 Dnawo's BLOG

分类:Web编程

共 938 篇

Effective C# 原则1:尽可能的使用属性(property),而不是数据成员(field)

出于以下几点原因,请在设计类时,尽可能的使用属性,而不是成员。 1、.Net对属性的支持远远大于对成员的支持,你可以对属性进行数据绑定,设计时说明等很多数据成员不被支持的内容。看看.net里的属性面板,你会明白的。 2、数据安全性检测; 属性本质上是两个函数,只是因为C#的特殊语法,但我们可以像访问成员一样的访问它。因此我们可以在属性设计上添加更多更灵活的内容,对属性进行管理。其中对属性数据的检测是其中之一。 在对数据检测时,如果发现数据不满足条件,最好以抛出异常的形式来解决,千万不要设置默认值,这是很危险的事情。例如: 看上去很不错不是吗?请马上动手修改你的代码吧,上面的代码是很危险的!或者你还不明白,明明对数据进行了安全检测,为什么还是危险的呢?试想这样的情况,有两个实例o1与o2, o1的Name为null,我们做了这样的事:o2.Name = o1.Name;…

慎用Request.Params获取参数值

今天一通道技术反映我们提交过去的url太长了,形如: http://service.5k3g.com/r.aspx?i=8986272,/ay/bajie10669611.ashx 在日志中找了相应的记录,日志如下: http://219.140.177.243/ay/bajie10669611.ashx?pid=5&phone=13182000000&name=%e5%a8%83%e5%a8%83&url=http%3a%2f%2fservice.5k3g.com%2fr.aspx%3fi%3d8986272 并没有多提交内容,最后发现原因是对方使用HttpContext.Current.Request.Params获取参数值。我们先来看一个例子:…

string.Format中大括号转义

今天在使用string.Format格式化一个字符串时老报错:输入字符串的格式不正确。 调试了好久才知道是需要对大括号进行转义,正确的代码应如下:

C#字符串数组所有项组成一个字符串的方法

JavaScript的数组有个join方法,使用它能将数组的各项用指定的分隔符连接起来: 但在C#的数组对象中一直没找到类似的方法,今天无意中在VS的自动完成列表中看到string对象有两个方法可以实现类似功能:

VS2008对引发异常和再次引发捕获异常的建议

运行代码分析后收到如下警告: 警告 4 CA2201 : Microsoft.Usage : 'CommandLine.Call(string, params string)' 创建类型为 'Exception' 的异常,该异常类型不够具体,不应由用户代码引发。如有可能引发此异常实例,请使用其他异常类型。 E:\www\Demo\ClassLibrary1\CommandLine.cs 29 ClassLibrary1 警告 5 CA2200 : Microsoft.Usage : 'CommandLine.Call(string, params string)' 再次引发捕获的异常并将其显式地指定为一个参数。请改用不带参数的“throw”以保留该异常最初引发时所在的堆栈位置。 E:\www\Demo\ClassLibrary1\CommandLine.cs 53 ClassLibrary1…

C#读取WinRAR安装路径

using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string args) { Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.…

C#字段和属性的区别

在C#中,我们可以非常自由的、毫无限制的访问公有字段,但在一些场合中,我们可能希望限制只能给字段赋于某个范围的值、或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性,属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作。在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。当缺少其中一块时属性就只能读或只能写,set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。 从例子中可看到属性其实就是对私有字段的读取和写入,以便做些公有字段无法完成的任务,他的使用方式和公有字段完全一样,所以可以理解成属性是为了满足对公有字段的特殊需求而产生的附属品。因而当我们选择使用属性还是使用字段时,主要看需求,如果不需设置访问权限、不需在赋值时检测值是否满足要求、不需要在赋值时修改对象其他一些状态等特殊的需求时,使用公有字段即可,否则就使用属性。

C#保存远程文件到本地

/// <summary> /// 保存远程文件到本地 /// </summary> /// <param name="url">远程文件URL</param> /// <param name="file">保存的本地路径</param> /// <returns></returns> public bool DownloadFile(string url, string file) { try { (new System.Net.WebClient()).DownloadFile(url,file); return true;…

彻底解决ASP.NET MD5加密中文结果和ASP不一致的问题

当要进行MD5加密的字符串不含中文时,那么ASP.NET的加密结果和ASP是一致的: ASP.NET: ASP: 当要进行MD5加密的字符串含中文时,两者的加密结果就不一致了: ASP.NET: ASP: 我们知道,ASP.NET默认使用utf-8编码格式,而ASP使用的是gb2312编码格式,正是由于这编码格式不同,才导致了两者对中文加密结果的不同。下边我们看看怎么让ASP.NET的编码结果和ASP一样,那也就意味着要让ASP.NET采用gb2312编码格式,这点FormsAuthentication.HashPasswordForStoringInConfigFile()方法是办不到的,我们得使用System.Security.Cryptography.MD5CryptoServiceProvider对象的ComputeHash方法来进行加密:…