文章标签 ‘C#’

[转载]网站使用QQ登陆 – 追夢 – 博客园. 上几天我朋友说他知道怎么实现网站使用QQ号登陆或者注册了,于是要他发给我学习,感觉好复杂,而且运行不了(主要万原因是因为这东西得上传到空间是实验),于是在博客园找了相关的资料,发现在也并不是很复杂的,比他的简单多了。 首先请到这里下载最新版本的SDK:http://opensns.codeplex.com/ SDK依赖于Newtonsoft.Json和RestSharp两个程序集,具体可以参考使用RestSharp 库消费Restful Service。 主要是两个类QzoneContext(QQ登陆的上下文数据)  和 QOpenClient (QQ互联API入口),其他类主要是模型,配置类。 我这里新建的项目是在.net framwork 4.0,请你转换成 .net framwork 4.0,否则可能会出错,运行不了 1、你得去http://connect.qq.com/ 申请一个账号,会得到一个APP ID和App Key,这两个东东会在生成请求的时候用到。你的去填一些资料,还要提交一些资料审核。 在配置文件web.config加入QQ登陆所需要的一些配置参数,下面的代码请加到如下图选中的地方 <section name="QzoneSection" type="System.Configuration.NameValueSectionHandler,System, Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089"></section><section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"></section>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;   AppKey是申请QQ登录成功后,分配给应用的appid;AppSecret是申请QQ登录成功后,分配给网站的appkey;CallBackURI是QQ登陆成功后的回调地址:AuthorizeURL是QQ互联的OAth2认证地址。 在项目中添加上面下载的SDK文件夹中三个引用Newtonsoft.Json.dll、RestSharp.dll和 QConnectSDK.dll, 在页面上放置按钮,打开qq登录的页面,然后登录成功之后回调您的网站的页面。此时如果用户在你的网站有账号,那就可以绑定现有账号,或者新注册一个账 号。如果你是新建站,也可以完全使用qq登录来作为用户体系。 登陆页面: using QConnectSDK.Context;//请加入这个命名空间 public partial class LoginToQQ : System.Web.UI.Page [...]

2012年4月1日08:28 评论关闭

[转载]C# delegate – 《孙金棚的程序人生》 – 博客园.  .Net 中的委托类似于 C 或 C++ 中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方 法。与 C 或 C++ 中的函数指针不同,委托是面向对象、类型安全的,并且是安全的。 委托声明定义一种类型,它用一组特定的参数以及返回类型封装方法。对于静态方法,委托对象封装要调用的方法。对于实例方法,委托对象同时封装一 个实例和该实例上的一个方法。如果您有一个委托对象和一组适当的参数,则可以用这些参数调用该委托。委托的一个有趣且有用的属性是,它不知道或不关心自己 引用的对象的类。任何对象都可以;只是方法的参数类型和返回类型必须与委托的参数类型和返回类型相匹配。这使得委托完全适合“匿名”调用。 在任何地方都可以使用Delegates 在这一点上,也许你只知道有这样一回事,但却没有察觉它在你的程序中的应用。虽然你没 有建立自己的delegates,但如果经常使用事件时你会使用到它们。一个极好的例子就是ASP.NET中使用的事件。在后台使用的Delegates 围绕着事件工作。事件使用一个标记,你也可以在一个线程结构中找到delegates。 Delegate 和 interface 你必须注意的另一个点是一个delegate和一个接口之间的相似性,因为它们都将规范和执行分离开来。它们允许开发人员建立与规范相符合的执行。除此之外,方法标记必须是被指定和相兼容。 所以,你什么时候使用接口?以及你什么时候使用delegates?微软提供了以下的指导思想。 Delegates: 调用一个单一方法。 一个类要进行方法规范(method specification)的多种执行。 使用一个静态方法来执行规范。 想获得类似事件设计的模式。 调用者没有必要知道或获得方法定义的对象。 执行的提供者想将规范的执行“分发”成一些选择性的部分。 interface: 规范指定一套即将被调用的方法。 特别的,一个类只执行规范一次。 接口的调用者想通过接口类型以获得其它接口或类。   下面我们用示例来理解一下吧!…………………O(∩_∩)O 示例1 BookDB是一个书籍数据库、他公开了ProcessPaperbackBooks 方法、并且每本平装书都调用一个委托ProcessBookDelegate、从而得到书籍标题和平均价格 Code: using System; namespace Bookstore { using System.Collections; public struct Book [...]

2012年3月26日14:57 评论关闭

[转载]C#中的时间日期加减法运算 – MrRock – 博客园. 方法是: AddYears();//年份的加减 AddMonths();//月份的加减 AddDays();//日期的加减 AddHours();//小时的加减 AddMinutes();//分钟的加减 AddSeconds();//秒的加减 AddMilliseconds();//毫秒的加减用法: DateTime dt = DateTime.Now; //首先我们需要DateTime的变量,你可以把你的符合格式的string直接Convert.ToDateTime(),这里我就用当前日期 dt.AddYears(1); //增加一年 dt.AddMonths(-1);//减少一个月 dt.AddDays(-20d);//减少20天 dt.AddHours(+20d);//增加20小时 dt.AddMinutes(10d);//增加10分钟 ……………….. 上面是一个日期自己的加减法,在附上,日期之间的加减法: DateTime dt =……//减数 DateTime dt_n = DateTime.Now;//被减数 long x = dt .ToFileTime();//表示自协调世界时 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的是协调世界时 (UTC)。 long y = dt_n.ToFileTime();long z [...]

2012年3月24日17:29 评论关闭

转载C#程序员请不要混淆引用类型和ref引用传参 – slmk – 博客园. 先看一段代码1: static void Main(string[] args) { StringBuilder sb = new StringBuilder("1"); test(sb); Console.WriteLine(sb.ToString()); Console.Read(); } static void test(StringBuilder sb) { sb = new StringBuilder("2"); } 错误的观念: 程序输出”2″,因为StringBuilder是引用类型,函数内部sb变量重新指向了托管堆中的新对象,函数返回后,外部的sb变量也指向了这个新对象,因为是引用类型吗,我传的是引用。 在错误的观念中,认为 “ref引用传参” 仅对.net中的另一种基本类型–值类型有用。 这种错误观念通常源于这样的经验,看代码2: static void Main(string[] args) { StringBuilder sb = new StringBuilder("1"); test(sb); Console.WriteLine(sb.ToString()); Console.Read(); } static void test(StringBuilder sb) { [...]

2012年3月19日22:02 评论关闭

[转载]c#使用foreach需要知道的 – smark – 博客园. 在C#中通过foreach遍历一个列表是经常拿用的方法,使用起来也方便,性能上也和for没有多大的差别;那为什么还要注意呢?我们先下来看下以下这句话:分 配的内存数量和完成测试所需的时间之间有直接关系。当我们单独查看的时候,内存分配并不是非常昂贵。但是,当内存系统只是偶尔清理不使用的内存时,问题就 出现了,并且问题出现的频率和要分配的内存数量成正比。因此,你分配越多的内存,对内存进行垃圾回收的频率就越频繁,你的代码性能就会变得越差。 从上面那些话可以看到内存的回收是非常损耗资源,那我们再看下一些.net内部类型的实现。 Array: // System.Array public IEnumerator GetEnumerator() { int lowerBound = this.GetLowerBound(0); if (this.Rank == 1 &amp;&amp; lowerBound == 0) { return new Array.SZArrayEnumerator(this); } return new Array.ArrayEnumerator(this, lowerBound, this.Length); } List: // System.Collections.Generic.List public List.Enumerator GetEnumerator() { return new List.Enumerator(this); } Dictionary: // System.Collections.Generic.Dictionary public Dictionary.Enumerator [...]

2012年3月12日09:21 评论关闭
备案信息:冀ICP备10007948号