代码改变世界

随笔分类 - .Net基础

泛型使用中,解决类型转换问题

2014-12-15 20:00 by JustRun, 3805 阅读, 收藏, 编辑
摘要:遇到的问题是这样,系统中有一个字符类型的字段来存储一些通用的系统配置,虽然存储的形式是字符串,但是实际在系统中的使用类型则可能是string, bool, int, decimal.这个时候就想写一个通用的方法来获取各种不同类型的返回值,当然这个时候想到的就是使用泛型。那么这个方法的定义大概就是这样... 阅读全文

.Net中使用SendGrid Web Api发送邮件(附源码)

2014-10-18 11:03 by JustRun, 3902 阅读, 收藏, 编辑
摘要:SendGrid是一个第三方的解决邮件发送服务的提供商,在国外使用的比较普遍。国内类似的服务是SendCloud.本文介绍如何在.Net中使用SendGrid的Restful API来发送邮件。 阅读全文

.Net Collection的一些理解——记录一次向实习生的答疑

2014-08-14 12:18 by JustRun, 2586 阅读, 收藏, 编辑
摘要:公司最近进了个实习生,每天下班前我都会花一些时间来解答一下实习生的一些疑问。今天问起了关于集合排序方法Sort的一些疑问,这让我一下回到自己刚刚入行的时候。那个时候也遇到了集合排序的问题,为发现接口IComparable和ICompare的妙处而兴奋,还在公司的内部分享会上分享了如何使用它们来排序。... 阅读全文

代替Reflection(反射)的一些方法

2014-07-08 08:00 by JustRun, 8724 阅读, 收藏, 编辑
摘要:Reflection(反射)是深入学习.Net必须掌握的技能之一。最初学Reflection的时候,的确是被惊住了,原来还可以这样。只要给你一个Assembly, 你就能获取到其中所有的类型,根据类型,你能够创建和操作对象的属性和方法,甚至是私有的。但是,每次使用Reflection,看着那些丑陋难... 阅读全文

.Net开源网络爬虫Abot介绍

2014-05-31 11:21 by JustRun, 8463 阅读, 收藏, 编辑
摘要:.Net中也有很多很多开源的爬虫工具,abot就是其中之一。Abot是一个开源的.net爬虫,速度快,易于使用和扩展。项目的地址是https://code.google.com/p/abot/对于爬取的Html,使用的分析工具是CsQuery, CsQuery可以算是.net中实现的Jquery, ... 阅读全文

理解C# 4 dynamic(4) – 让人惊艳的Clay

2014-01-22 07:27 by JustRun, 13759 阅读, 收藏, 编辑
摘要:Clay非常类似于ExpandoObject, 可以看做是ExpandoObject的加强版. 它们能够让我们在不需要定义类的情况下,就构建出我们想要的对象。Clay和ExpandoObject相比,提供了更加灵活的语法支持,让我们像写javascript代码一样写C#代码,同时还能够用于构建多层级的复杂对象。阅读目录:一、多种方式初始化对象二、构建神奇的Array三、为对象动态添加方法四、动态的实现接口五、Clay的应用背景六、Clay的Sample一,多种方式初始化对象1, 最简单的对象构建和初始化dynamic New = new ClayFactory();var person = N 阅读全文

.Net Attribute详解(上)-Attribute本质以及一个简单示例

2013-11-27 08:10 by JustRun, 8256 阅读, 收藏, 编辑
摘要:Attribute的直接翻译是属性,这和Property容易产生混淆,所以一般翻译成特性加以区分。Attribute常常的表现形式就是[AttributeName], 随意地添加在class, method的头上,然后就能够产生各种各样奇特的效果和行为。比如关于序列化的标签[Serializable]用来指定一个实体类可以序列化。[NonSerialized]可以用来指定某些属性不包含在序列化中。一, Attribute本质是什么?Attribute类似于标签, 可以为类,方法,结构体,属性,委托等贴上标签,在以后的实际执行时候,根据不同的标签做不同的处理。拿类做个比方,如果把一个类看做一个人 阅读全文

.Net中使用aliases让相同命名空间的dll引用共存

2013-11-12 18:40 by JustRun, 1723 阅读, 收藏, 编辑
摘要:有些不得已的时候,我们需要同时在代码中使用某个dll的不同版本。比如用低版本的dll中的方法导出数据,然后使用高版本的方法导入数据来实现数据的升级. 又或者需要同时使用第三方的dll不同版本。如何使它们并存于系统中是个难题。如果同时存在于系统中,会出现ambiguous refrence(有歧义的引用)的编译错误。下文介绍如何使用aliases解决这个问题。一, 构建两个不同版本的Project首先构建2个不同的Project来模拟不同版本的dll引用, 这两个project中的命名空间和类名完全相同。在MultipleVersionTest项目中同时引用这两个Project. 如下图:Hig 阅读全文

理解C# 4 dynamic(3) – DynamicObject的使用

2013-08-14 21:36 by JustRun, 7418 阅读, 收藏, 编辑
摘要:上篇文章"理解C# 4 dynamic(2) – ExpandoObject的使用" 了解了ExpandoObject的基本使用。但ExpandoObject的问题就是它是一个万金油,什么都可以做,但是又都不专注。使用DynamicObject正好可以解决这个问题。这篇文章介绍DynamicJson是如何继承DynamicObject,包装一个用来处理Json的动态类型。阅读目录:一、JS可以灵活处理Json字符串二、DynamicObject分析三、DynamicJson代码四、总结一,JS可以灵活处理Json字符串看下面的代码,var jsonString='{ 阅读全文

理解C# 4 dynamic(2) – ExpandoObject的使用

2013-07-23 22:35 by JustRun, 6154 阅读, 收藏, 编辑
摘要:ExpandoObject的使用非常简单,很容易入手。上一篇里面已经有详细的介绍了,可以看这里(理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用)下面对ExpandoObject的使用场合和一些认为需要注意的地方,谈一下自己的看法:一,ExpandoObject使用场合在传递对象,但是又不想创建一个class或者struct的时候,ExpandoObject就是一个非常好的选择。假如我们有一个SendMail的函数,功能是发送一个通知邮件给客户,邮件的文本模板,如下:Dear [Name],We have sent the gift 阅读全文

理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用

2013-06-30 11:32 by JustRun, 13950 阅读, 收藏, 编辑
摘要:阅读目录:一.为什么是它们三个二. 能够任意赋值的原因三. dynamic的用法四. 使用dynamic的注意事项一. 为什么是它们三个?拿这三者比较的原因是它们在使用的时候非常相似。你可以用它们声明的变量赋任何类型的值。看看下面的示例:var a = 1;object b = 1;dynamic c = 1;你还可以使用关键字为它们赋上更加复杂的类型var a = new string[]{"1"};object b = new string[]{"1"};dynamic c = new string[]{"1"};二. 能够任意赋 阅读全文

换个角度看委托

2013-04-21 09:02 by JustRun, 2613 阅读, 收藏, 编辑
摘要:毛主席说过长征是宣言书,长征是宣传队,长征是播种机。那么委托是什么呢?阅读目录:一、 委托是函数模板二、委托是函数指针三、委托是函数指针集合四、委托是事件通知五、委托是外部帮手六、.net中定义的丰富多彩的委托一、 委托是函数模板和类做对比, 类是对象的模板, 那么委托就是函数的模板.先看看平常我们如何定义一个classpublic class ClassA{}如上,我们使用关键字class来定义一个类.对于委托,我们使用delagate来定义:public delegate void MyDelegate(string a);我们定义了一个MyDelegate类型, 它定义的函数模板要求: 阅读全文

.net 中的WeakReference

2013-02-03 16:11 by JustRun, 683 阅读, 收藏, 编辑
摘要:我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回收对象的。我们能不能同时保持对对象的引用,而又可以让GC需要的时候回收这个对象呢?.NET中提供了WeakReference来实现。弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。阅读目录:一. 弱引用的一个简单示例二. 短弱引用和长弱引用一、弱引用的一个简单示例弱引用使用起来很简单,看下面的代码:Object obj = new Object();WeakReference wref 阅读全文

使用PrivateObject帮助单元测试

2013-01-02 13:23 by JustRun, 529 阅读, 收藏, 编辑
摘要:单元测试中,有时候需要检查一些私有变量的值时候改变,或者是否是预想的值,使用常规方法很难办到;使用反射,又会显得太麻烦。关于PrivateObject的更多使用方法,可以参考http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privateobject%28v=vs.80%29.aspxvar object = new Object();//可以替换成任何我们需要测试的类 var privateObject = new PrivateObject(object);接着就可以使用 阅读全文

在Winform,Silvelight,WPF等程序中访问Asp.net MVC web api

2012-11-08 19:53 by JustRun, 1431 阅读, 收藏, 编辑
摘要:Asp.net mvc 4中出现的web api是用来实现REST.关于什么是REST,可以看这里http://zh.wikipedia.org/zh/REST通过ajax等访问 web api非常方便,但是如何在Winform, Silverlight等访问web api呢?通过搜索,发现了已经有人做过这个东西了,就是RestSharp.http://restsharp.org/https://github.com/restsharp/RestSharpRestSharp不只是访问web api, 访问其他平台的Rest API也是一样。看看介绍的使用,无论是post数据,文件,格式化返回数 阅读全文

在Autofac中如何获取注册组件的类型

2012-10-17 22:11 by JustRun, 955 阅读, 收藏, 编辑
摘要:假如这里我注册component:builder.RegisterType<DeleteOrganization>().As<IDeleteOrganization>();后面我们想获取类型,可以这样container.Resolve<IDeleteOrganization>().GetType()但是这样是先实例化了DeleteOrganization对象,然后再获取Type, 但是我们并不需要实例。如何做才能更有效率呢?合理的做法是:var registration = container.ComponentRegistry .Registrations 阅读全文

Nuget挂了的解决方法

2012-10-11 14:33 by JustRun, 585 阅读, 收藏, 编辑
摘要:一点题外话,不知道老是这样搞,怎么能提高国力去要回钓鱼岛?转自: http://www.cnblogs.com/TianFang/archive/2012/10/08/2715824.html今天用Nuget下一个程序包时,发现Nuget挂了:未能解析此远程名称:'nuget.org'。第一反应就是方校长抖威风了,挂个代理上http://nuget.org试了下,果然好好的。用命令nslookup nuget.org试了下,域名无法解析;便用google的DNS重新解析了下nslookup nuget.org 8.8.8.8,能解析出157.56.8.150来;再用http:/ 阅读全文

什么是域(domain)

2012-10-11 08:43 by JustRun, 920 阅读, 收藏, 编辑
摘要:转自: http://www.cnblogs.com/jfzhu/archive/2012/10/11/2719285.html在今天很多人都有意识或无意识的跟域这个东西打过交道。如果你在公司里使用电脑,并且你的电脑接入了公司的局域网,那你的电脑很可能就在一个域中。如何查看你的电脑是否连接到一个域中,以Windows为例,右击我的电脑 –>属性,可以看到,我现在使用的这台电脑就加入了一个域。域已经成为绝大多数公司组织、连接电脑的一种方式。那么我们究竟为什么要使用域?它能给我们带来什么好处呢?假设你是公司的系统管理员,你们公司有一千台电脑。如果你要为每台电脑设置登录帐户,设置权限(比如是否 阅读全文

理解为什么要使用Ioc

2012-10-11 06:34 by JustRun, 4833 阅读, 收藏, 编辑
摘要:转自 http://www.cnblogs.com/shanyou/archive/2010/05/28/1746711.html较复杂的应用程序都是由多个项目组织成的,项目可以划分成程序集(Assemblies)和宿主(Hosts),也就是应用程序的入口。Assemblies 通常是常见的类库项目,包括可以重用的功能和方便测试,通常包括下面的组件:Views, Controllers 和 Models服务持久类 和 repositoriesDecoratorsReusable user controls规则库业务逻辑这些项目通常不应该直接依赖于下面的组件:IoC 容器程序集;日志记录框架 ; 阅读全文

认证 (authentication) 和授权 (authorization) 的区别

2012-09-27 09:04 by JustRun, 514 阅读, 收藏, 编辑
摘要:转自 http://www.cnblogs.com/joooy/archive/2010/08/08/1795257.html以前一直分不清 authentication 和 authorization,其实很简单,举个例子来说:你要登机,你需要出示你的 passport 和 ticket,passport 是为了证明你张三确实是你张三,这就是 authentication;而机票是为了证明你张三确实买了票可以上飞机,这就是 authorization。在 computer science 领域再举个例子:你要登陆论坛,输入用户名张三,密码1234,密码正确,证明你张三确实是张三,这就是 au 阅读全文