Fork me on GitHub

随笔分类 -  C#面向对象编程

摘要:前面的两篇关于多线程的文章大体说了下线程的基础应用就没下文了,一是由于最近专业课作业把人搞得乱七八糟,呵呵,今天继续补充,马上要考试了,或许也是本学期最后一篇,之前一直是直接谈多线程,但是等我做上一篇博文小翻译程序的时候,发现如果处理某些逻辑简单的同/异步程序的时候委托是非常方便,有了前两篇博文的基础,这里就不再解释同步和异步了,但是我会在示例程序中反映出来。 同学在处理跨线程的时候用的Invoke()方法处理给我演示,给我说这就是多线程效果,其实Invoke()方法只不过是用来绑定委托调用对象参数的,这种也就只是实现了利用委托,达到同步也就是线程阻塞的效果而已,但是需要注意的是... 阅读全文
posted @ 2012-06-26 20:51 Halower 阅读(1033) 评论(5) 推荐(7) 编辑
摘要:博客园里有几篇关于父亲节的文章?什么狗屁的父亲节母亲节,为什么不去想想让父母天天像过节一样,为什么只有到了外国人的父亲节,母亲节才想起有个爸妈,除此在外boss比爹还亲呢。 很多人把时间都用在了自己的所谓的事业上,但是又给家庭成员带来了什么呢,也许你会常常看见,有人写本书写文章,说是献给亲爱的父母,老婆,孩子。但是父母,老婆,孩子知道程序是个锤子,人生没有"乌云"和"闪电"的时间也就短短几年的时间,程序没了可以重写,书没了,等老了经验丰富了,无牵无挂了可以慢慢写点此生最高水准的,可是亲人没了,就再也没了,严重的自我安慰其实损失最大的还是亲人,搞不定那天就 阅读全文
posted @ 2012-06-17 23:51 Halower 阅读(2861) 评论(27) 推荐(4) 编辑
摘要:前些天答应木木同学给写一个多线程的帖子,一直没有时间,今天上课,老师要我看着视频短片问那个属于广告(当然不是针对我一个人,只是偶被点名叫起来回答问题),我靠,对于一个大三广告专业的学生,尼玛严重怀疑我的智商,听你照着书本念了一学期了,现在又要我看着短片说哪个是广告,尼玛坑爹啊,尼玛去问问你家男人估计他都知道那个是广告,对于我们专业的老师,我三年的丰富的听课经验得出的经验就是,浪费学生的生命还TM乐此不疲,照本宣科还以为比我们学识渊博,我不讨厌这个专业,可以你们TM那么浮躁干嘛,不想上课了就放电影,你妹啊,我们这群孩子考上本科不是天天来看电影的,可不可以负点责任,你妹你上课放电影,哥走了... 阅读全文
posted @ 2012-05-23 14:52 Halower 阅读(2354) 评论(11) 推荐(9) 编辑
摘要:我们在前面的文章中提到了两中实现晚绑定的方式,那么在用的时候是否发现有什么不同呢? 是的,我们会很容易的发现Activator.CreateInstance()创建的对象,我们只能访问他的访问级别为public的方法,但是我们仅仅小小的统一下手脚,使用BindingFlags.NonPublic|BindingFlags.Instance就可以获得该对象的internal,private级别的变量。但是往往后一种方式我们也是不经常采取的,因为我们需要稳定的成员支持,而私有类型的成员往往是程序中最容易更新的,假如一个程序集更新后,我们使用这种方式调用即会发生错误。 今天刚... 阅读全文
posted @ 2012-05-03 06:10 Halower 阅读(3875) 评论(11) 推荐(9) 编辑
摘要:前言:由于身边也没什么学习资料,也就一边利用网络一边自己理解整理,慢慢地步入神秘的反射机制。 反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。 简而言之, 反射机制指的是程序在运行时能够获取自身的信息。例如一个对象能够在运行时知道自己有哪些方法和属性。 使用 Assembly 定义和加载程序集,加载在程序集清单中列出的模块,以及从此程序集中查找类型并创建该类型的实例。 使用 Module 发现以下信息:包含模块的程序集以及... 阅读全文
posted @ 2012-04-26 03:21 Halower 阅读(2506) 评论(1) 推荐(7) 编辑
摘要:当我们在连接MSSQLSEVER的时候,一般都是SqlConnectioncon=newSqlConnection(ConStr);这样的格式格式来创建连接字符串的,这是时候我们我们似乎感觉他很方便。但是突然那一天你的老板给你给一个Oracle的备份数据库,你是不是还要OracleConnectioncon=newOracleConnection(conStr);又突然老板突发奇想,觉得数据量也不大,而且ACCESS2010还蛮潮流的,你给我换成ACCESS要我哪里都可以直接打开,你是否又要OleDbConnectionconn=newOleDbConnection(conStr);刚做好.. 阅读全文
posted @ 2012-04-24 16:13 Halower 阅读(1324) 评论(5) 推荐(6) 编辑
摘要:在博问里看到有人在问关于GC的问题,便自己也发了个回复赚点园豆。今天阳光明媚啊,又是个艳阳天呢。转入正题:什么是"GC"?垃圾收集器GC(garbagecollector)。对于这个概念应该是所有.net学习这都知道的,它使得程序对于内存的分配、回收都不需要程序员操作,程序员只要需要的时候new就可以,用完了不用管,有人帮你清除不用的内存。这个人就是“垃圾收集器”。.Net程序员一般不用像C++程序员那样处理内存的申请和回收,是因为有GC。知道概念我们就该细致的总结一下它的详细特性。对象的生存周期1.当我们创建一个对象的时候,运行构造函数,为其分配一块内存,我们称之为一个活 阅读全文
posted @ 2012-04-20 13:08 Halower 阅读(4230) 评论(6) 推荐(6) 编辑
摘要:特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集、类型、方法、属性等)相关联。特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询特性。这篇文章绝大部分是按照MSDN来学习的,只是加了一点点自己的东东,官方介绍的很详细,我们就一起来了解一下它的用法。特性具有以下属性:特性可向程序中添加元数据。元数据是有关在程序中定义的类型的信息。所有的 .NET 程序集都包含指定的一组元数据,这些元数据描述在程序集中定义的类型和类型成员。可以添加自定义特性,以指定所需的任何附加信息。可以将一个或多个特性应用到整个程序集、模块或较小的程序元素(如类和属性)。特性可以与方法和属性相同的... 阅读全文
posted @ 2012-04-19 00:31 Halower 阅读(65899) 评论(17) 推荐(24) 编辑
摘要:为什么要出现委托,为什么又要出现事件,事件和委托又是什么关系,既然有网友问到了,我也回顾一下。 1.委托的出现是基于多态,增加相同类型函数操作代码的复用性以减少冗余代码。 2.委托和事件没有可比性,因为委托是类型,事件是对象。 对于第一点大家都应该特别熟悉,这个帖子主要就看第二个问题。 首先我用委托方式实现的一个事件(之后会用标准的event方式实现),但是应该有个观念事件的内部是用委托实 现的. 1.我首先使用委托方式实现的一个事件.我首先定义了一个旅行社TravelagencyDelegate用来代理购票业务。 之后定义了一个售票点里面包含了:买票行为,以及权限证明。好了上代码: 1 us 阅读全文
posted @ 2012-04-15 22:39 Halower 阅读(2904) 评论(12) 推荐(10) 编辑
摘要:InnerXML返回XmlNode它内部的所有节点构成的Xml片段。对于含有命名空间的元素作以下方式处理。InnerText返回内部文本部分。<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template >...</xsl:template></xsl:stylesheet><xsl:stylesheet version="1.0" xmlns:xsl=&qu 阅读全文
posted @ 2012-04-09 16:27 Halower 阅读(813) 评论(0) 推荐(2) 编辑
摘要:System.Xml.XmlReader和System.Xml.XmlWriters是两个抽象类,XmlReader提供了对于XML数据的快速,非缓存,只进模式的读取器,XmlWriter表示一个编写器,该编写器提供快速,非缓存,只进的方式来生成包含XML数据的流文件。XmlReader与SAX读取器类似,不过前者是提取模式(只进只读的游标),后者是推送模式(将事件推送到应用程序)。XmlReader的优点是:1.简化状态管理2.可以有多个输入流3.提取模式可以作为推送模式的基础,反之不行。4.提供一个可以将字符串直接写入缓冲区,避免多余字节的的复制。5.有选择的处理XML流,可以预先设置处理 阅读全文
posted @ 2012-04-07 00:33 Halower 阅读(754) 评论(0) 推荐(2) 编辑
摘要:DAL层代码: 1 using System.Collections.Generic; 2 using System.Data; 3 using DataTreeModel; 4 using System.Data.SqlClient; 5 using System.Windows.Forms; 6 7 namespace DataTreeDAL 8 { 9 class TreesNodeDAL10 {11 //根据Parentid返回表中所有的的实体对象12 public IEnumerable<ItemsNode> GetEveryOneB... 阅读全文
posted @ 2012-04-04 00:37 Halower 阅读(2047) 评论(0) 推荐(2) 编辑
摘要:FileStream 1 static void Main(string[] args) 2 { 3 //创建FileStream对象需要指定 文件名,打开模式,访问模式,共享模式 4 //1.调用本身的构造函数创建流 5 FileStream fs1 = new FileStream(@"F:\1.txt", FileMode.Open, FileAccess.ReadWrite,FileShare.ReadWrite); 6 //2.利用File类或者FileInfo类的O... 阅读全文
posted @ 2012-04-02 01:50 Halower 阅读(542) 评论(0) 推荐(2) 编辑
摘要:昨天宿舍没电,终于有耐心花了两个小时完整写了一个简易的代码生成器,要去上课了,就随便说一下1.运行环境 : WIN7+.NET4.0+msSQLSEVER20082.生成代码模式: 三层中的两层 DAL+BLL 外加一个模型model3.主要组成: 自己封装的一个SMO 数据库操作辅助类+耐心拼接字符串4.缺陷:对SQL字符类型的转换只是列举了一部分,需要后期按照需要扩充5.运行步骤:检索局域网内所有的SQL服务器-------》选择服务器----------》选择身份验证--------》加载数据库文件-------》--------》选择数据库名---------------》列遍历所选数 阅读全文
posted @ 2012-03-30 10:13 Halower 阅读(843) 评论(0) 推荐(3) 编辑
摘要:我们在使用Main()方法的时候有没有注意过入口参数args的传入传出的值是什么呢?或许这个问题小的都没人注意。刚刚使用IO命名空间下的,Enveriment.Environment.GetCommandLineArgs();获取观察了一下,就会发现,这里的args参数我们是可以自己修改,也可以由程序返回,同时也可以执行前使用cmd方式传入,也可以固定的方式输入,方法很多,我是菜鸟刚学也就发现了这么一点点,博客园的高手们就是好啊,对我这样的超级大菜鸟还是很包容的,有问题大家就帮帮我,目前主攻文学,哲学,神学,但是遇到程序的问题周围没人学这个,只能一个人解决,问题很多啊,大家可以给我指导一下。好 阅读全文
posted @ 2012-03-14 00:27 Halower 阅读(11176) 评论(47) 推荐(6) 编辑
摘要:这几日没时间学习程序,老师都安排我去听马克思哲学了,闲暇时间还要陪老婆聊天,今天算是学习文件操作的第一天,也就抽时间写个笔记,感觉.NET的IO命名空间下的文件操作类型是目前我遇到的几种语言中最丰富和简洁的所以很好学习,先画个文件类框架呗。任何编程语言操作文件都要调用操作系统的应用程序接口来实现,.NET框架提供了功能强大的统一的应用程序接口,在System.IO命名空间下,定义了多种文件管理,文件和数据流读写的类型。废话也就不多说了,我们来看下我参考微软的官方实例写的例子using System;using System.IO;namespace 文件操作{ class Test ... 阅读全文
posted @ 2012-03-12 22:33 Halower 阅读(4368) 评论(15) 推荐(5) 编辑
摘要:前言前几日同学告诉我他老师告诉他,泛型是定义一种通用的方法,至于为什么用泛型他的答案还是定义一种通用的方法,当时我也没有学,还不懂啦,毕竟人家是计算机专业的科班生,我当然没有发言权,只是怀疑的记下了这个错误的结论打算以后看看是不是对的,这两天算是把泛型学了一下,其实它定义的不只是方法,自己感觉他就是一种规范代码执行效率的模版,这样极不容易出错,并把我们常用的箱拆箱操作过程给省了,提高了编译器的执行效率,。至于为什么用泛型这个我貌似已经说明白了,泛型多用于集合类操作,我在这里随意的拿出C#定义的ArrayList的Add方法的定义我们一起看看:publicvirtualintAdd(Object 阅读全文
posted @ 2012-03-08 09:59 Halower 阅读(966) 评论(0) 推荐(2) 编辑
摘要:在许多情况下,重载运算符允许生成可读性更高、更直观.我认为即便是你学什么语言的编程你都在有意无意的接触过编译器预定义的运算符重载只是没有那个概念罢了,下面是我在学习过程中的总结。运算符的工作方式 :为了理解运算符是如何重载的,我先了解一下编译器遇到运算符时会做怎么的处理,我们用相加运算符+作为例子来讲解。假定编译器遇到下面的代码:int a = 1;uint b = 2;double c = 3.0;long l = a + b;double d = a+c;long l = a + b;编译器知道它需要把两个整数加起来,并把结果赋予long。调用一个方法把数字加在一起时,表达式a+b是一种非 阅读全文
posted @ 2012-03-08 09:23 Halower 阅读(1927) 评论(2) 推荐(2) 编辑
摘要:对于抽象类,只需要将它看成一种其他类实现某些功能的模版,例如我们定义一个事物模版,那么它有身高,体重,语言,国籍,语言......这样的一系列的特征我们知道他应该描述的是一个人,只要我们将这些特性一一赋值,就能知道这个事物的具体存在。因此我们不能实例化这个模版(不能使用new关键字),他不代表任何一个现实的存在,只是为利用它而进行实例化的实例提供了若干接口,因为他是模版所以不能私有化,即不能使用private关键字。同时抽象方法隐含为virtual方法,以重写(override)的方式达到实例化的目的,但是不能使用virtual关键字。 在对抽象类测试的过程中,我发现了如下特性:1.抽象类.. 阅读全文
posted @ 2012-03-07 20:30 Halower 阅读(450) 评论(0) 推荐(0) 编辑
摘要:原理:当需要在内部类的内部访问外部类实例时,可以将代表外部类的实例的this关键字作为一个参数传递给内部类,这样就可以实现在内部类的内部访问外部类实例,其实质还是在内部类中用外部类的实例去访问自身的方法而已。如下我写的实例主要是看卡这种效果,可以参考一下: using System;namespace TestinerClass{ class OutClass { string name = "外部类实例字段"; public void display() { Console.WriteLine("调用外部实例方法!... 阅读全文
posted @ 2012-03-07 20:29 Halower 阅读(3340) 评论(0) 推荐(0) 编辑