跟小D每日学口语

随笔分类 -  CSharp Technical

上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 21 下一页
CSharp Technical
摘要:摘 要反射,一个很有用且有意思的特性。当动态创建某个类型的实例或是调用方法或是访问对象成员时通常会用到它,它是基于程序集及元数据而工作的,所以这一章我们来讨论一下程序集、反射如何工作、如何动态创建类型及对象等相关知识,甚至可以动态创建程序集。第一节 应用程序域与程序集通过本系列的前面章节,我们已经知道,Windows为每个进程分配独立的内存空间地址,各个进程之间不能直接相互访问。Windows对.NET的支持是以宿主和COM的形式实现的,基于.NET平台语言实现的代码文件使用Windows PE的文件格式,CLR其实就是COM,相当于一个虚拟机(当然这个虚拟机可以部署到任意支持它的系统环境中) 阅读全文
posted @ 2012-09-12 12:50 Danny Chen 阅读(329) 评论(0) 推荐(0)
摘要:入门篇假设你是有着.Net平台的程序员,并且使用Visual Studio 做为开发工具。断点:最简单的一种,设置一个断点,程序执行到那一句就自动中断进入调试状态。设置断点,在你觉得有问题的代码行,左侧单击,会出现红色的红点即断点。启动调式:按F5,或者菜单栏---调式---开始调试,或者工具栏的图标快速监视:快速查看变量或者表达式的值,也可以自定义表达式进行计算单步执行有三种,一种是每次执行一行(F10);一种是每次执行一行,但遇到函数调用就会跳到被调用的函数里(F11);一种是直接执行当前函数里剩下的指令,返回上一级函数(Shift+F11)。还有一种后悔药,设为下一句(Set Next 阅读全文
posted @ 2012-09-10 10:24 Danny Chen 阅读(3606) 评论(0) 推荐(0)
摘要:Entity entCurr = entCollection.Find(delegate(Entity m) { returnm.name== "aa"; }); 对象List<Entity> ltEntity= entCollection.FindAll(delegate(Entity m) { returnm.name== "aa"; })C# ListArrays do not resize dynamically. TheListtype in the C# language does. With List, you do not n 阅读全文
posted @ 2012-09-07 10:59 Danny Chen 阅读(8836) 评论(0) 推荐(0)
摘要:有经验的开发人员都知道在开发.NET应用时可以利用配置文件保存一些常用并且有可能变化的信息,例如日志文件的保存路径、数据库连接信息等等,这样即使生产环境中的参数信息与开发环境不一致也只需要更改配置文件而不用改动源代码再重新编译,极其方便。并且我们一般还约定,在<appSettings>节点保存应用程序的配置信息,在<connectionStrings>中保存数据库连接字符串信息(详见本博客《ASP.NET夜话之十一》)。上面的这些方法和约定足以让我们在大部分开发中获得方便,但是在有些情况下有些配置信息可以按组分类存放,如果采用上面的方法不仅不直观,而且读取起来也不是太方 阅读全文
posted @ 2012-09-05 15:53 Danny Chen 阅读(569) 评论(0) 推荐(0)
摘要:索引器概述索引器使得对象可按照与数组相似的方法进行索引。get 访问器返回值。set 访问器分配值。this 关键字用于定义索引器。value 关键字用于定义由 set 索引器分配的值。索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。索引器可被重载。索引器可以有多个形参,例如当访问二维数组时。C#语言一个最令人感兴趣的地方就是类的索引器(indexer)。简单说来,所谓索引器就是一类特殊的属性,通过它们你就可以像引用数组一样引用自己的类。显然,这一功能在创建集合类的场合特别有用,而在其他某些情况下,比如处理大型文件或者抽象某些有限资源等,能让类具有类似数组的行为当然也是非常有用的 阅读全文
posted @ 2012-09-05 10:34 Danny Chen 阅读(249) 评论(0) 推荐(0)
摘要:List <T>是ArrayList的泛型,ArrayList里边的数据类型是object,List <T>里边的是具体的某种类型,ArrayList类似于向量,可以存储不同的数据类型在一个数组里边(转换为了object)。 一般使用的时候尽量使用List <T>,因为ArrayList存取都要进行一次转换。 []类型的数组类似于List <T>,不同的是[]是定长的,而List <T>是长度可变的数组ICollection主要针对静态集合;IList主要针对动态集合 IEnumerable <T>继承自IEnumerab 阅读全文
posted @ 2012-09-02 00:18 Danny Chen 阅读(757) 评论(0) 推荐(0)
摘要:再优秀的程序员在编程的过程中也会犯些错误,何况是我们这些初级程序学者;好的程序员会找出一些错误并修改它们.有时候程序中存在一些微妙的错误我们发现不了的时候就得跟踪代码进行调试.一.VisualStudio中的调试在调试模式下运行程序时,运行的是编写好的代码.调试程序的信息在VS执行每行代码过程中发生了甚么都有记录,这些信息保存在Debug目录下的.pdb格式文件中.在运行期间把文本写入Output窗口是非常简单的.此时可以使用一下两个命令:Debug.WriteLine()Trace.WriteLine()这两个命令函数的使用方法差不多,区别在第一个命令是在调试模式下运行而第二个还可以用于发布 阅读全文
posted @ 2012-09-02 00:15 Danny Chen 阅读(2411) 评论(0) 推荐(0)
摘要:C# 3.0下有限状态机的一种优雅的实现实现状态机有多种模式,其中最灵活而强大的方式是通过迁移表来实现,该方式的缺点之一是需要编写大量小块代码去支持迁移表。而在C#3.0中,可以以一种非常优雅的方式实现。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace StateMachine{class Program{static void Main(string[] args){var door = new Door(State.Open);while (true){st 阅读全文
posted @ 2012-09-01 23:14 Danny Chen 阅读(466) 评论(0) 推荐(0)
摘要:摘 要说到序列化,大家都非常熟悉XML序列化,还有二进制序列化,经过序列化的数据流更方便传输和存储。其实我们可以对序列化进行更多的控制,比如对序列化(和反序列化)前后的数据操作、定义自己的可序列化类型等。这一章我们来讨论一下有关于序列化和反序列化。第一节 序列化1、 序列化序列化包括正向序列化和反向序列化,一般我们将正向序列化说成是序列化。序列化(Serialization)是将一个类对象转化成一个字节流。反序列化(Deserialization)是将一个字节流转化成一个对应的类对象的过程。在WCF通信中,当向服务端发送请求的时候,WCF是先把本地的内存对象序列化成XML或Binary通过信道 阅读全文
posted @ 2012-09-01 17:10 Danny Chen 阅读(371) 评论(0) 推荐(0)
摘要:MSBuild基本概念(续)在上一篇简单的介绍了下MSBuild中的四个基本块,每块介绍比较单薄,在这里对在大多数的项目模版生成的*.*proj文件中比较常见一些用法和概念做些补充。主要有一下几方面:MSBuild特殊字符:MSBuild保留的一些字符,以及XML中的特殊字符处理。MSBuild条件: Condition特性,作用类似于C#的if。MSBuild属性: 使用环境变量、保留属性、全局属性。MSBuild项: 元数据、项转换。MSBuild任务: ITask接口、UsingTask[自定义任务]、ContinueOnError。MSBuild目标: 初始目标、默认目标、目标依赖项。 阅读全文
posted @ 2012-09-01 16:53 Danny Chen 阅读(2452) 评论(0) 推荐(0)
摘要:MSBuild是什么?MSBuild全称(Microsoft Build Engine),是用来生成.NET程序的平台。您可能不知道它,但是如果您在使用VS做开发,那么一定时时刻刻在使用它。因为是它在背后为你管理生成你 的项目文件。当新建一个项目时,注意下项目文件夹中的*.*proj文件就是为MSBuild提供的,这是个文本文件,基于XML格式,里面包含有项目所 包含的文件,生成配置,输出配置等信息。当把一个文件或者图片等添加到项目中,就会在这里添加一个描述,反之则删除一个描述信息;在项目属性页所做的配置 也会在这里存储。为何去了解MSBuild想去了解这个源于以前学WPF时的疑惑(当时就想从 阅读全文
posted @ 2012-09-01 16:52 Danny Chen 阅读(568) 评论(0) 推荐(0)
摘要:一、委托Delegate一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如[c-sharp] view plaincopypublicvoidHelloWorld(){Console.WriteLine("HelloWorld!");}publicvoidHelloWorld(stringname){Console.WriteLine("Hello,{0}!",name);}但是有些时候,我们希望把一个方法本身当做参数传递给另一个方法,比如myObject.callMethod 阅读全文
posted @ 2012-09-01 14:59 Danny Chen 阅读(199) 评论(0) 推荐(0)
摘要:做了几次。每次都忘记。所以记录下来。测试环境如下:Windows 7Visual Studio 2010[csharp]view plaincopy//建立一个函数privatevoidcallOnClick(Buttonbtn){//建立一个类型Typet=typeof(Button);//参数对象object[]p=newobject[1];//产生方法MethodInfom=t.GetMethod("OnClick",BindingFlags.NonPublic|BindingFlags.Instance);//参数赋值。传入函数p[0]=EventArgs.Empt 阅读全文
posted @ 2012-08-30 10:12 Danny Chen 阅读(7223) 评论(0) 推荐(0)
摘要:On开头的方法都是引发事件的方法,至于你所说的为什么click事件先被触发,是因为你在OnClick方法中的base.OnClick(e);后做了断点,你应该把断点放在base.OnClick(e);前因为base.OnClick(e)会引发click事件。Click事件是由OnClick(虚)方法引发。 阅读全文
posted @ 2012-08-30 10:09 Danny Chen 阅读(2762) 评论(0) 推荐(0)
摘要:[日期:2005-01-22]来源:博客堂 作者:破宝[字体:大 中 小]目录属性样式的事件声明单播事件和多播事件支持多播事件的改进属性样式的事件声明在第一节中,我们讨论了 .NET 事件模型的基本实现方式。这一部分我们将学习 C# 语言提供的高级实现方式:使用 add/remove 访问器声明事件。(注:本节内容不适用于 VB.NET。)我们再来看看上一节中我们声明事件的格式: public event [委托类型] [事件名称];这种声明方法,类似于类中的字段(field)。无论是否有事件处理程序挂接,它都会占用一定的内存空间。一般情况中,这样的内存消耗或许是微不足 道的;然... 阅读全文
posted @ 2012-08-30 00:30 Danny Chen 阅读(213) 评论(0) 推荐(0)
摘要:通过前两节的学习,你已经掌握了 .NET 事件模型的原理和实现方式。这一节我将介绍两个替代方案,这些方案并不是推荐采用的,请尽量采用事件模型去实现。另外,在本节末尾,有一段适合熟悉 Java 语言的读者阅读,讨论了 .NET 和 Java 在“事件模型”方面的差异。目录使用接口实现回调.NET 事件模型和 Java 事件模型的对比使用接口实现回调事件模型其实是回调函数的一种特例。像前面的例子,Form1 调用了 Worker,Worker 反过来(通过事件模型)让 Form1 改变了状态栏的信息。这个操作就属于回调的一种。在“.NET Framework 类库设计指南”中提到了:“委托、接口和 阅读全文
posted @ 2012-08-30 00:30 Danny Chen 阅读(201) 评论(0) 推荐(0)
摘要:目录事件、事件处理程序概念问题描述:一个需要较长时间才能完成的任务高耦合的实现事件模型的解决方案,简单易懂的 VB.NET 版本委托(delegate)简介C# 实现向“.NET Framework 类库设计指南”靠拢,标准实现事件、事件处理程序概念在面向对象理论中,一个对象(类的实例)可以有属性(property,获取或设置对象的状态)、方法(method,对象可以做的动作)等成员外,还有事件(event)。所谓事件,是对象内部状态发生了某些变化、或者对象做某些动作时(或做之前、做之后),向外界发出的通知。打个比方就是,对象“张三”肚子疼了,然后他站在空地上大叫一声“我肚子疼了!”事件就是这 阅读全文
posted @ 2012-08-30 00:28 Danny Chen 阅读(514) 评论(0) 推荐(0)
摘要:一、了解C#中的预定义事件处理机制在写代码前我们先来熟悉.net框架中和事件有关的类和委托,了解C#中预定义事件的处理。EventArgs是包含事件数据的类的基类,用于传递事件的细节。EventHandler是一个委托声明如下public delegate void EventHandler( object sender , EventArgs e )注意这里的参数,前者是一个对象(其实这里传递的是对象的引用,如果是button1的click事件则sender就是button1),后面是包含事件数据的类的基类。下面我们研究一下Button类看看其中的事件声明(使用WinCV工具查看),以Cli 阅读全文
posted @ 2012-08-30 00:13 Danny Chen 阅读(493) 评论(0) 推荐(0)
摘要:Predicate 泛型委托表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由Array和List类的几种方法使用,用于在集合中搜索元素。看看下面它的定义://Summary://Representsthemethodthatdefinesasetofcriteriaanddetermineswhether//thespecifiedobjectmeetsthosecriteria.////Parameters://obj://Theobjecttocompareagainstthecriteriadefinedwithinthemethodrepresented//bythisd 阅读全文
posted @ 2012-08-29 23:29 Danny Chen 阅读(629) 评论(0) 推荐(0)
摘要:.net的一个很重要的特性就是跨语言的编程,用C#写的dll可以在VB.net里调用,例如:用C#写的一个类,编译到dll中,然后在VB.net中调用:usingSystem;namespaceCLSsample{publicclassCLSTest{publicCLSTest(){}publicvoidABC(){Console.WriteLine("ABC");}}}在VB.net中调用:DimcAsCLSsample.CLSTest =NewCLSsample.CLSTestc.ABC()现在给dll中的CLSTest类加一个函数:public voidabc(){C 阅读全文
posted @ 2012-08-29 17:12 Danny Chen 阅读(3187) 评论(0) 推荐(1)

上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 21 下一页