随笔分类 -  c#编程指南

1
摘要:指针就是变量的地址。引用就是变量的别名。 1 #include <stdio.h> 2 3 //reference is nickname of the variable. 4 //pointer is address of variable. 5 int _tmain(int argc, _TCHAR* argv[]) 6 { 7 int x = 1000; 8 int * pointer = &x; 9 int & reference = x;10 //11 printf("-----------------values---------------- 阅读全文
posted @ 2011-03-03 15:53 香山飘雪 阅读(541) 评论(0) 推荐(0) 编辑
摘要:C#编程经常使用属性,也经常用特性,但是自定义用的比较少,但是老外的代码却很多使用。今天介绍一下,其实很简单。第一:自定义特性继承System.Attribute类。第二:自定特性命名后缀为Attribute,这样符合微软的命名风格,也符合编译器的搜索规则。第三:使用[]语法使用自定义特性。第四:可以使用反射来查看自定义特性;测试代码如下:[代码]解释:我定义了一个ExtraAttribute的自... 阅读全文
posted @ 2010-10-18 14:53 香山飘雪 阅读(1741) 评论(0) 推荐(0) 编辑
摘要:第一:绑定运算符,:=:comboBox1.Text :=: textBox1.Text; //将文本框的内容绑定到下拉框。第二:带参数的泛型构造函数:public class T MyClass : T: class, new()//we might havepublic class T MyClass : T:class, new(int)第三:支持null类型运算:int x? = null... 阅读全文
posted @ 2010-10-15 14:54 香山飘雪 阅读(3622) 评论(22) 推荐(0) 编辑
摘要:字符串和字节流的转化,主要用的是System.Text.Encoding类,下面的代码示例,实现了UTF8,UTF32,GB2312常用编码的文本转化,代码很简单,也不用解释,放在这里供大家参考,方便之余,还是赞叹一个.net的给力吧!![代码] 阅读全文
posted @ 2010-09-16 13:46 香山飘雪 阅读(4942) 评论(1) 推荐(1) 编辑
摘要:首先这个原作者没有提供源代码,这个代码是我根据作者原意写的,这里面包括我前面介绍到的Lambda,LINQ,表达式树,反射和Tuple.综合了很多新特性,也算是一个不错的综合示例,可以当个考题,哈哈。问题源自于:如果你有一大堆的各式各样类的示例,现在你要Dump所有这些类的属性,改怎么做?方法一:使用传统的反射,代码很简单,就是得到某一个类的实例,然后得到类的类型,从类型获得所有的属性,然后得到具... 阅读全文
posted @ 2010-09-02 17:10 香山飘雪 阅读(2768) 评论(11) 推荐(2) 编辑
摘要:这是P-INVOKE系列的最后一篇,也是万剑归宗的一篇,基本上只要函数签名对了,用他可以传递任何参数,函数的输入输出参数和返回值你也可以随心所欲地修改。把这个放在最后也是最完美的结局吧!!C++:测试代码如下:[代码]C#:在P-INVOKE中,我把C++指针参数Marshal成C#类的输入参数,把C++返回值为结构体的Marshal成字符串。注意下面的P-INVOKE声明。UnmanagedTy... 阅读全文
posted @ 2010-08-27 17:54 香山飘雪 阅读(2911) 评论(2) 推荐(0) 编辑
摘要:这篇解决上篇那个结构体作为返回值的问题。我们结合反汇编来探索这里面的秘密。如何反汇编?方法如下:在C++函数内下断点,调试到断点断下,右键菜单,选择"反汇编",反汇编是VS自带功能。下面是几个简单的类:[代码]分别用上面的方法来逐个分析汇编:汇编里有我详细的注释:[代码]总结一下,这个结构体作为返回值,主要依赖于编译器对于超过8字节的返回值的编译处理。第一:不建议使用结构体作为返回值,因为这太依赖... 阅读全文
posted @ 2010-08-27 11:41 香山飘雪 阅读(1748) 评论(0) 推荐(0) 编辑
摘要:这篇讲关于结构体和结构体指针的P-INVOKE,关键有4个P-INVOKE类型,结构体作为输入输出参数。结构体指针作为输入输出参数。还有结构体内的成员类型分为:数组,指针,指针数组,结构体,结构体指针,结构体数组,结构体指针数组。当然还有类继承(这里只介绍了单继承)。其中有一个比较费解的是结构体作为返回值的P-INVOKE的奇怪现象,下一篇结合反汇编讲解。第一:C++结构体和C#结构体对应关系,看... 阅读全文
posted @ 2010-08-26 16:52 香山飘雪 阅读(4327) 评论(15) 推荐(2) 编辑
摘要:在使用结构体指针,进行C#和C++的互相调用。边界对齐是一个大问题,因为边界对齐问题,结构体的成员并不是顺序在内存一个挨着一个的排序。而且在C++中可以使用#pragma pack(n)改变边界对齐的方案,那C#的结构体怎么对应C++的结构体那?(什么是边界对齐,这里不解释,不懂得可以去看看C++基本编程之类的书好好恶补一下.)第一:最普通的情况下,C++代码没有使用#pragma pack(n)... 阅读全文
posted @ 2010-08-26 09:56 香山飘雪 阅读(4969) 评论(10) 推荐(0) 编辑
摘要:这篇是讲述P-INVOKE中,应对各种指针的方法。包括普通指针,字符串指针,二级指针,指针数组,函数指针,结构体指针。篇幅估计有点长,大家耐心点看。嘿嘿~~第一:普通指针,包括char *,short *,int *,__int64 *,这些指针进行平台调用是都对应C#的IntPtr类型,然后使用Marshal.ReadXXX()系列函数读取就可,写内存时使用Marshal.WriteXXX()系... 阅读全文
posted @ 2010-08-25 14:29 香山飘雪 阅读(4258) 评论(8) 推荐(0) 编辑
摘要:可以说新手使用P-INVOKE最开始的头疼就是C#和C++的字符串传递,因为这里涉及到两个问题。第一:C#的string和C++的字符串首指针如何对应。第二:字符串还有ANSI和UNICODE(宽字符串)之分。本文分三部分阐述:第一:字符串指针当输入参数,第二:字符串指针作为返回值,第三:字符串指针作为输入输出参数。C++部分的测试代码很简单这里就全部贴出来了:[代码]下面看C#如何调用。第一:字... 阅读全文
posted @ 2010-08-24 17:24 香山飘雪 阅读(8315) 评论(4) 推荐(5) 编辑
摘要:第一:C# 调用C++,使用P-INVOKE技术调用C++编写的动态链接库。而动态链接库导出的一般有两种调用协议,__stdcall和_cdecl。下面展示调用两种不同调用协议的方法:C++:[代码]c#:[代码]第二:C#调用C++代码,也可以间接的使用C++的函数指针。(强烈建议不要使用此方法)c++:[代码]C#:[代码]第三:C++调用C#函数,C#定义方法和方法的委托。传递委托给C++函... 阅读全文
posted @ 2010-08-24 17:02 香山飘雪 阅读(4288) 评论(8) 推荐(0) 编辑
摘要:刚才有网友问是不是可以异步发送邮件,我测试完全没有问题。注意这里用到了SendCompleted事件和SendAsync方法。代码如下,代码简单不做太多解释,不懂得看我上一篇文章。[代码]。很简单吧。代码测试完全没有问题,注意替换成真正有效的GMAIL账户。下载:下载 阅读全文
posted @ 2010-08-19 20:00 香山飘雪 阅读(1002) 评论(4) 推荐(1) 编辑
摘要:C#利用System.Net.Mail类发送邮件相当简单。但是由于一般的邮件服务器都要进行垃圾邮件过滤,要求在使用SMTP服务前,先要进行POP3验证,但是.NET Framework的API不支持这个验证功能。所以在这里推荐大家使用谷歌的Gmail发送。通过谷歌的SMTP服务器发送邮件。第一:需要指明谷歌SMTP服务器地址:smtp.gmail.com第二:开启SSL安全连接。第三:需要谷歌的用... 阅读全文
posted @ 2010-08-19 17:59 香山飘雪 阅读(1387) 评论(6) 推荐(0) 编辑
摘要:类索引器,可以使得你使用数组一样的方式来访问类的数据。这种访问多见于数组,列表,词典,哈希表的快捷访问。实际上写法很简单,写成:public T1 this[T2 i]代码如下:[代码]很简单吧,第一个,我定义了一个可读可写的以int为参数的索引器。第二个,我定义了一个可读的以string为参数的索引器。第三个,比较搞怪了,我定义了一个color参数的索引器。呵呵,是很简单吧!!SkyDriver... 阅读全文
posted @ 2010-08-19 17:06 香山飘雪 阅读(958) 评论(1) 推荐(0) 编辑
摘要:C# 3.0就引入的新特性,扩展方法可以很大的增加你代码的优美度,扩展方法提供你扩展.NET Framewoke类的扩展途径,书写和规则也简单的要命。编写扩展方法有下面几个要求:第一:扩展方法所在的类必须是全局的,不能是内部嵌套类。第二:扩展方法的类是静态类。第三:扩展方法是静态方法。第四:扩展方法的第一个参数的数据类型必须是要扩展类型。第五:扩展方法的第一个参数使用this关键字。下面是一段很简... 阅读全文
posted @ 2010-08-17 10:29 香山飘雪 阅读(2293) 评论(2) 推荐(3) 编辑
摘要:组元是C# 4.0引入的一个新特性,编写的时候需要基于.NET Framework 4.0或者更高版本。组元使用泛型来简化一个类的定义。先以下面的一段代码为例子:[代码]一个简单的包含两个Int类型成员的类,传统的方法定义point需要写很多代码,但是使用tuple却只有一句,组元多用于方法的返回值。如果一个函数返回多个类型,这样就不在用out , ref等输出参数了,可以直接定义一个tuple类... 阅读全文
posted @ 2010-08-16 06:57 香山飘雪 阅读(28406) 评论(13) 推荐(9) 编辑
摘要:泛型委托实际上就是一个.NET Framework预定义的委托,基本涵盖了所有常用的委托,所以一般不用用户重新声明啦。很简单,看下面简单的小例子:[代码]Action系列泛型委托,是没有返回参数的委托,我简单的举了一个无参数的委托,带一个参数的委托,还有带两个参数的委托。调用的时候和普通的委托没有声明两样。具体的方法我使用的是lambda写的,我前面文章有介绍。是不是很简单,不用自己在写publi... 阅读全文
posted @ 2010-08-15 09:14 香山飘雪 阅读(1855) 评论(5) 推荐(1) 编辑
摘要:C# 3.0 带来了强大的基于方法的查询LINQ。为了开发者更好更方便的使用LINQ,微软有随即引入两个新特性:Lambda和Expression。Lambda简单来说就是一个匿名方法的简略写法,Expression和Lambda的关系可以从下面的一小段代码看下:(.NET Framework 3.5, 记住引用命名空间System.Linq.Expressions;)[代码]输出结果为下:[代码... 阅读全文
posted @ 2010-08-14 08:50 香山飘雪 阅读(4468) 评论(0) 推荐(0) 编辑
摘要:“Lambda 表达式”是一个匿名函数,是C# 3.0引入的新特性。Lambda 运算符 =>,该运算符读为“goes to”。下面的代码简单的演示了Lambda表达式的出现:[代码]同样一个lambda表达式,也有简略的写法和完全的写法,下面的4个lambda表达式,实际上是同样的功能:[代码]第一种写法是最简单的方式。第二种写法是有一个输入... 阅读全文
posted @ 2010-08-13 06:47 香山飘雪 阅读(1525) 评论(1) 推荐(2) 编辑

1