`
andyjackson
  • 浏览: 57349 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论
文章列表
        XAML 是一种基于 XML 语法的用来创建 .NET 对象树的语言。从严格意义上来讲, XAML 与 WPF 是相互独立的。 XAML 更多的算是一种技术,并不是专门供 WPF 使用的。比如 WWF(Windows Workflow Foundation) 就能够用 XAML 表示工作流。 XAML 本质上只是一种用于构建 .NET 对象树的语言,与 WPF 框架没有特殊的关联。下面了解一下 XAML 编译器的工作原理。 命名空间          XAML 使用 XML 命名空间 ...
GetHashCode函数一般是在操作HashTable或者Dictionary之类的数据集的时候被调用,目的是产生一个Key,为了方便在 HashTable或者 Dictionary中的检索。 每个类型,不管是值类型还是引用类型,都提供这个基本函数,同样也可以像重写ToString或者Equals函数一样去重写它。但是不建议重写此函数,而且在使用这个函数也需要加倍小心。   对于GetHashCode来说,要满足如下三点,这也是判断一个GetHashCode函数
运行时,参数类型检查。咋一看,这似乎违背了上面说到的原则,不是说要让错误的检测尽量提到编译期间,由JIT来完成么;其实并不矛盾,运行时参数的检测是为了提高代码的性能,而不是去进行异常的处理。有时候,提供的参数提供了更强大的功能,我们需要在运行时判断其类型,因为编译期间无法做到这一点(泛型的实例化是基于编译期类型而非运行期的),并利用这种类型的功能。下面的例子可以说明: public class ReverseEnumerable<T>:IEnumerable<T> { private class ReverseEnumerator:IEnumerator<T ...
从.NET2.0起,C#引入了泛型的概念。从代码编写的角度看,无疑提高了代码的编写效率;从编译器的工作来看,提高了代码的安全性,泛型的引入避免了几乎所有的运行时的异常,在以前的版本中,系统需要对类型进行检查,对这些异常进行处理,包括栈审核和栈解退,对性能造成影响;同时,在以前版本的Framework中,强制使用System.Object类型,只有在使用之前才将其动态强制转换为需要的类型,这个过程涉及到拆箱和装箱的操作,可能对性能,尤其是使用值类型的性能造成巨大的影响。   编译器对参数为引用类型和值类型的泛型的处理是不同的:(有个概念:所有参数都已经明确给出的泛型类型叫做封闭泛型类型;而仅仅 ...
看完了内核对象,现在看进程。都知道进程是通过内核对象被操作系统管理的。它由内核对象和地址空间组成。   下面看看CreateProcess函数:创建进程。需要说明的是,在进程完全初始化之前该函数就会返回true。 这意味着操作系统j加载程序尚未进行定位所有所必要的dll。如果某个dll找不到或者未能正确初始化,进程就会终止。因为CreateProcess返回TRUE,所以父进程不会注意到任何初始化的问题。   1.pszCommandLine参数。 表示创建的进程的命令行参数,操作系统会修改我们传的命令行参数,但是在函数返回之前还原为原来的形式。它是PTSTR类型,表示传入的是一 ...
上篇讲到通过DuplicateHandle共享内核对象的用法。下面先讲讲DuplicateHandle另一种用法: 假设一个进程对一个文件映射对象拥有读写权限。在程序的某个位置,调用一个函数,并希望它对文件只有读权限。应该使用DuplicateHandle为现 ...
今天想把看的第三章的心得写下来。 这章主要介绍了内核对象。在WINDOWS中,内核对象是由操作系统来管理,尽管用户能够创建它,但是在创建之后,用户对该内核对象的操作都是委托给操作系统。 通常用户创建和使用的对象分为:用户对象(如 HICON CreateIcon(prama))、GDI对象函数以及内核对象。像访问令牌、事件对象、文件对象、文件映像对象、进程对象、信号量等都属于内核对象。在内核对象第一次被创建的是,系统会根据给定的参数初始化,其中有一个参数:PSECURITY_ATTRIBUTES,是SECURITY_ATTRIBUTES的指针,SECURITY_ATTRIBUTES的结构如下 ...
ANSI和UNICODE作为目前最流行的字符编码格式,C标准库和WINDOWS提供安全和一般的字符串函数一般都有针对它们的版本,但是目前WINDOWS趋向不在提供ANSI的版本。   使用时需要遵守的准则: 将文本字符串想象为字符数组,而不是CHAR或者字节数组。 用明确的数据类型(BYTE和PBYTE)来表示字节、字节指针和数据缓冲区。 用TEXT或_T宏表示字面量字符或者字符串。 执行全局修改,如将PSTR改为PTSTR。、 用-countof(szBuffer)计算缓冲区的字符数,用sizeof(szBuffer)计算字节数。内存的分配时事按字节数计算的。
windows常见的函数返回值类型: VOID: 一般用于那些极少数的不可能失败的函数。   BOOL:如果函数失败,返回0;否则,返回一个非0的值;因此检查时,最好是检验返回值是否为FALSE而不是TRUE。   HANDLE:如果函数失败,返回NULL或者INVALID_HANDLE_VVALUE的句柄值,它被定义为-1;成功,HANDLE将标志一个可操纵的句柄值。   PVOID:失败,返回NULL;成功,PVOID将标志一个数据块的内存地址。   LONG/DWORD: 主要用于计数的函数,如果失败通常返回0或-1。   ------------------ ...

openid和oauth

    看了一下有关openid核oauth的知识,觉得有必要解释一下二者。     openid是一项在国外已经很流行的技术,对于所有支持openid的网站,用户可以只用一个账号就可以啦。目前,微软和google同时宣布支持openid,令人高兴。目前,国内有个所谓的“人人互联”,当然用到了其中的一些技术,但是与传统的openid支持商(provider)不同的是,目前人人网并没有公布人人互联的API。开发者无法利用API,使用人人的账号进行登录。     oauth应该说是由openid衍生出来的。他超越的openid需要身份验证的机制,为用户提供了一种可以不共享密码而授权第三方来访问其 ...
我感觉既然是学习知识没有必要首先一开始就将Spring框架结合进来,这样不利于进一步更深的理解。   今天继续看了一下restlet的相关知识,感觉有必要写一下关于Guard&Filter的相关知识。关于Guard具体是什么以及Filter和restlet中有什么区别,可以参考本站ajax的博客:http://ajaxcn.iteye.com 我现在要讲一下如何在application中配置Guard,在createRoot方法中加入一下代码创建一个Guard的对象: MapVerifier verifier = new MapVerifier();         ver ...
 几天看了ajax的关于restlet的文章,受益匪浅,这里首先要表示感谢!        在看用Component进行对application管理的时候,老是发现一个500的错误,上面显示大概是无法获得connecter对象的原因。百思不得其解,最后发现原来是我的restlet包的版本不对,改为1.1.9后马上好了。 下面顺便把配置默认Component的方法贴出来: <context-param> <param-name>org.restlet.application</param-name> <param-value>fir ...
今天,我花了好多时间做一道关于vb的题目,本来以为好简单。于是,我仔细的做大概12点的时候,程序算是写好了。本来以为差不多要完成了除了一些小错误。然而,我错了……程序出了一个致命的bug一运行就为响应。 我也不知道为什么,认为是msgbox用法有误…… 于是,我在网上收集各种msgbox的用法,都大同小异,都类似于: msgbox(对话框显示的表达式,对话框类型,对话框标题,其他) 其中仅第一个是必须的,不过通常都指明了对话框类型,如vbyesno、vbyesnocancel、vbokcancel等,这都是些常量,有对应的值:vbOKOnly                    ...
Global site tag (gtag.js) - Google Analytics