- 博客(103)
- 资源 (16)
- 收藏
- 关注
原创 基于.NET的Excel开发:单元格区域的操作(读取、赋值、边框和格式)
引用using Excel = Microsoft.Office.Interop.Excel; 定义1 Excel.ApplicationClass app;2 Excel.Workbooks books;3 Excel.Workbook book;4 Excel.Sheets sheets;5 Excel.Worksheet sheet;6
2014-07-02 12:00:34 2848
原创 .NET通过RFC读取SAP数据
本篇文章中我主要讲的是.NET如何通过RFC从SAP中读取数据。为了功能的可复用性,我将调用RFC的代码从业务层中分离出来单独建立在一个namespace中。 当然除了需要我们自己编写代码以外,还需要引用SAP提供的程序集文件(sapnco.dll、sapnco_utils.dll),在代码文件需要引用相应的命名空间(using SAP.Middleware.Connector;)。
2014-05-22 10:24:52 718
原创 Node.js入门:Hello World
马上开始我们第一个Node.js应用:“Hello World”。打开你的编辑器,创建一个hello.js文件。编写代码保存该文件,并通过Node.js来执行。控制台输出1 console.log('hello, nodejs.') ; Web输出1 var http = require("http"); 2 http.createServer(fun
2014-05-19 15:36:05 601
原创 Node.js入门:异步IO
异步IO 在操作系统中,程序运行的空间分为内核空间和用户空间。我们常常提起的异步I/O,其实质是用户空间中的程序不用依赖内核空间中的I/O操作实际完成,即可进行后续任务。同步IO的并行模式多线程单进程 多线程的设计之处就是为了在共享的程序空间中,实现并行处理任务,从而达到充分利用CPU的效果。多线程的缺点在于执行时上下文交换的开销较大,和
2014-05-18 18:00:46 938
原创 Node.js入门:文件查找机制
文件查找流程图从文件模块缓存中加载 尽管原生模块与文件模块的优先级不同,但是都不会优先于从文件模块的缓存中加载已经存在的模块。从原生模块加载 原生模块的优先级仅次于文件模块缓存的优先级。require方法在解析文件名之后,优先检查模块是否在原生模块列表中。以http模块为例,尽管在目录下存在一个http/http.js/htt
2014-05-18 17:55:40 1950
原创 Node.js入门:事件机制
Evented I/O for V8 JavaScript 基于V8引擎实现的事件驱动IO。事件机制的实现 Node.js中大部分的模块,都继承自Event模块(http://nodejs.org/docs/latest/api/events.html )。Event模块(events.EventEmitter)是一个简单的事件监听器模式的实现。具有addListe
2014-05-18 17:39:41 583
原创 Node.js入门:前后端模块的异同
通常有一些模块可以同时适用于前后端,但是在浏览器端通过script标签的载入JavaScript文件的方式与Node.js不同。Node.js在载入到最终的执行中,进行了包装,使得每个文件中的变量天然的形成在一个闭包之中,不会污染全局变量。而浏览器端则通常是裸露的JavaScript代码片段。所以为了解决前后端一致性的问题,类库开发者需要将类库代码包装在一个闭包内。以下代码片段抽取自著名类库und
2014-05-18 17:36:00 515
原创 Node.js入门:模块机制
CommonJS规范 早在Netscape诞生不久后,JavaScript就一直在探索本地编程的路,Rhino是其代表产物。无奈那时服务端JavaScript走的路均是参考众多服务器端语言来实现的,在这样的背景之下,一没有特色,二没有实用价值。但是随着JavaScript在前端的应用越来越广泛,以及服务端JavaScript的推动,JavaScript现有的规范十分薄弱,不利于
2014-05-18 17:33:14 741
原创 Node.js入门:包结构
JavaScript缺少包结构。CommonJS致力于改变这种现状,于是定义了包的结构规范(http://wiki.commonjs.org/wiki/Packages/1.0 )。而NPM的出现则是为了在CommonJS规范的基础上,实现解决包的安装卸载,依赖管理,版本管理等问题。require的查找机制明了之后,我们来看一下包的细节。 一个符合CommonJS规范的包应该是如下这种结
2014-05-18 17:27:24 501
原创 Node.js入门:Node.js&NPM的安装与配置
Node.js安装与配置 Node.js已经诞生两年有余,由于一直处于快速开发中,过去的一些安装配置介绍多数针对0.4.x版本而言的,并非适合最新的0.6.x的版本情况了,对此,我们将在0.6.x的版本上介绍Node.js的安装和配置。(本文一律以0.6.1为例,0.6的其余版本,只需替换版本号即可。从http://nodejs.org/#download可以查看到最新的二进制版本和源
2014-05-18 17:21:12 717
原创 DataGridView列排序混乱的处理方法
在C#程序开发中DataGridView可以说是使用最多的数据呈现控件了,但是在使用的过程中我们会发现当绑定的数据源有较多数据列的时候,DataGridView上显示的列的顺序就会出现混乱的现象。那我们该如何解决这个问题呢?其实只要设置下面的代码就可以了,相当的简单。
2014-05-15 09:40:50 1929
原创 金蝶二次开发之C#编写EBOS插件
1 建立C#类库项目2 引用EBOS组建Kingdee.K3.BOS.PlugInModel3 示例代码4 DLL文件部署路径//K3ERP/KDHR/SITEFILE/WEBUI/BIN5 插件中输入命名空间名+类名6 可设置程序属性中的生成目录为//K3ERP/KDHR/SITEFILE/WEBUI/BIN方便测试和部署7 调试附加到
2014-04-25 10:01:28 5441 1
原创 .NET 数据类型之指针类型(type*)
指针类型 在不安全的上下文中,类型可以是指针类型以及值类型或引用类型。 指针类型不继承 object,并且指针类型与 object 之间不存在转换。此外,装箱和取消装箱不支持指针。但是,允许在不同指针类型之间以及指针类型与整型之间进行转换。 当在同一个声明中声明多个指针时,* 仅与基础类型一起使用,而不是作为每个指针名称的前缀。 指针不能指向引用或包
2014-04-25 09:49:50 611
原创 .NET 数据类型之字符串(String)
字符串 表示文本,即一系列 Unicode 字符。字符串是 Unicode 字符的有序集合,用于表示文本。 String 对象是 System.Char 对象的有序集合,用于表示字符串。 String 对象的值是该有序集合的内容,并且该值是不可变的(即,为只读)。String 对象的最大大小内存中的为 2 GB 或大约 10 亿个字符。关键字 string
2014-04-25 09:27:41 612
原创 .NET 数据类型之类(Class)
类 类是 C# 中功能最为强大的数据类型。像结构一样,类也定义了数据类型的数据和行为。然后,程序员可以创建作为此类的实例的对象。与结构不同,类支持继承,而继承是面向对象编程的基础部分。构造函数 构造函数是在创建给定类型的对象时执行的类方法,是在运行时调用的而非编译时,包括实例构造函数和静态构造函数。构造函数与类名相同,且不能有返回值。构造
2014-04-25 09:26:51 743
原创 .NET 数据类型之动态类型(Dynamic)
Dynamic 在通过 dynamic 类型实现的操作中,该类型的作用是绕过编译时类型检查, 改为在运行时解析这些操作。 dynamic 类型简化了对 COM API(例如 Office Automation API)、动态 API(例如 IronPython 库)和 HTML 文档对象模型 (DOM) 的访问。 在大多数情况下,dynamic 类型与 object 类
2014-04-25 09:26:02 1265
原创 .NET 数据类型之匿名类型(var)
匿名类型 匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。 类型名由编译器生成,并且不能在源代码级使用。 每个属性的类型由编译器推断。可通过使用 new 运算符和对象初始值创建匿名类型。限制条件没有控制匿名类型的名字。语法var v = new { Amount = 108,
2014-04-25 09:24:05 672
原创 .NET 运算符
运算符 C# 提供大量运算符,这些运算符是指定在表达式中执行哪些操作的符号。通常允许对枚举进行整型运算,例如 ==、!=、、=、binary +、binary -、^、&、|、~、++、-- 和 sizeof()。此外,很多运算符可被用户重载,由此在应用到用户定义的类型时更改这些运算符的含义。 运算符类别运算符基本
2014-04-25 09:23:10 625
原创 .NET 方法概述
方法 “方法”是包含一系列语句的代码块。在 C# 中,每个执行指令都是在方法的上下文中完成的。方法在类或结构中声明,声明时,声明时需要指定访问级别、返回值、方法名称以及任何方法参数。方法参数放在括号中,并用逗号隔开。空括号表示方法不需要参数。方法可以有或没有参数,也可以有或没有返回值。Main方法 Main 方法是控制台应用程序或窗口应用程序的入口点。M
2014-04-25 09:16:47 497
原创 .NET 属性
属性 属性又称访问器,它是这样的成员:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称为“访问器”的特殊方法,访问器与方法一样可以被重写,这使得数据在可被轻松访问的同时,仍能提供方法的安全性和灵活性。作用 属性使类能够以一种公开的方法获取和设置值,同时隐藏实现或验证代码。它们可在允许更改前验证数据,
2014-04-25 09:16:04 503
原创 .NET 索引器
索引器 索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。特性索引器使得对象可按照与数组相似的方法进行索引。代码示例class SampleCollection{ private T[] arr = new T[100]; public
2014-04-25 09:15:09 444
原创 .NET 迭代器
迭代器 迭代器是方法、get 访问器或运算符,它使您能够在类或结构中支持 foreach 迭代,而不必实现整个 IEnumerable 接口。您只需提供一个迭代器,即可遍历类中的数据结构。当编译器检测到迭代器时,它将自动生成 IEnumerable 或 IEnumerable 接口的 Current、MoveNext 和 Dispose 方法。 迭代器是可以返回相同类型
2014-04-25 09:14:31 450
原创 .NET 泛型方法
泛型方法 泛型方法是使用类型参数声明的方法。static void Swap(ref T lhs, ref T rhs){ T temp; temp = lhs; lhs = rhs; rhs = temp;}类型推断 相同的类型推断规则也适用于静态方法以及实例方法。编
2014-04-25 09:09:14 563
原创 .NET 扩展方法
扩展方法 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。 对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。 通常,建议您只在不得已的情况下才实现扩展方法,并谨慎地实现。 只
2014-04-25 09:06:30 578
原创 .NET 分部方法
分部方法 分部类或结构可以包含分部方法。 类的一个部分包含方法的签名。 可以在同一部分或另一个部分中定义可选实现。 如果未提供该实现,则会在编译时移除方法以及对方法的所有调用。 分部方法使类的某个部分的实施者能够定义方法(类似于事件)。 类的另一部分的实施者可以决定是否实现该方法。 如果未实现该方法,编译器将移除方法签名以及对该方法的所有调用。 调用该方法,包括调用中的
2014-04-25 09:05:38 827
原创 .NET base与this
base base 关键字用于从派生类中访问基类的成员常用用途调用基类上已被其他方法重写的方法。指定创建派生类实例时应调用的基类构造函数。备注 基类访问只能在构造函数、实例方法或实例属性访问器中进行。从静态方法中使用 base 关键字是错误的。this this 关键字引用类的当前实例。常用用途
2014-04-25 09:05:14 498
原创 .NET using关键字
引用命名空间 using System;为命名空间或类型创建别名 using aClass = NameSpace1.MyClass;using语句 定义一个范围,在范围结束时处理对象。不过该对象必须实现了IDisposable接口。其功能和t
2014-04-25 09:04:53 375
原创 .NET 预处理器指令
C# 预处理器指令 虽然编译器没有单独的预处理器,但在处理该节中描述的指令时如同存在一个单独的预处理器;这些指令用于辅助条件编译。 与 C 和 C++ 指令不同,不能使用这些指令创建宏。预处理器指令必须是行上的唯一指令。#if 如果 C# 编译器遇到最后面跟有 #endif 指令的 #if 指令,则仅当指定的符号已定义时,它才会编译这两个指令之间
2014-04-24 16:48:01 523
原创 .NET 面向对象基础
封装 对象的内部数据不应该从对象的实例直接访问,如果调用者想改变对象的状态就要使用访问方法(getter)和修改方法(setter),封装提供了一种保护状态数据完整性的方法,可用于验证输入数据是否
2014-04-24 16:46:41 360
原创 .NET 异常处理
异常处理 可以使用 TryCatch 活动处理方法执行期间引发的异常。 可以对这些异常进行处理,或者使用 Rethrow 活动重新引发异常。 Finally 节中的活动在 Try 节或 Catches 节完成时执行。 捕获异常后进行记录并保证程序可以继续正常使用。异常处理四要素一个表示异常详细信息的类类型一个向调用者引发异常类实例的成员调用者
2014-04-24 16:45:46 312
原创 .NET 委托
委托类型定义 C#编译器处理委托时,先自动产生一个派生自System.MulticastDelegate的密封类。这个类与它的基类System.Delegate一起为委托提供必要的基础设施,以维护以后将要调用的方法列表。它含有3个编译器生成的方法,这3个方法的参数与返回值基于委托的声明。 public sealed class DelegateN
2014-04-24 16:28:57 374
原创 .NET 事件
事件概述 在发生其他类或对象关注的事情时,类或对象可通过事件通知它们。发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为“订户”。特点发行者确定何时引发事件,订户确定执行何种操作来响应该事件。一个事件可以有多个订户。一个订户可处理来自多
2014-04-24 16:27:20 505
原创 .NET Lambda
Lambda概述 lambda 表达式是一个可用于创建委托或表达式树类型的匿名函数。 通过使用 lambda 表达式,可以可作为参数或返回编写本地函数,该函数调用的值。 Lambda 表达式用于编写 LINQ 查询表达式特别有用。 若要创建 lambda 表达式,则在 lambda 运算符 =>的左侧指定输入参数 (如果有),因此,您放置表达式或语句在另一端块。
2014-04-24 16:26:36 537
原创 .NET 接口
接口 接口是一组抽象成员的集合,表示某个类或结构可以选择去实现的行为,描述的是可属于任何类或结构的一组相关功能。接口方法的实现是在实现接口的类中完成的,实现接口的类可以显式实现该接口的成员,显式实现的成员不能通过类实例访问,而只能通过接口实例访问。接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型。 它不能包含静态成员。 接口成员是自动公开的,且不能包含任何访问修饰符
2014-04-24 16:25:18 549
原创 .NET 泛型
泛型 泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险。 使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性
2014-04-24 16:22:26 407
原创 .NET 多线程
多线程 在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。多线程处理一个常见的例子就是用户界面。利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应。基础概念进程 进程是应用程序的实例要使用的资源的一个集合。每个应用程序
2014-04-24 16:18:00 682
原创 .NET Attributes
Attributes 特性 公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。 定制特性attribute,本质上是一个类,其为目标
2014-04-24 15:09:06 410
原创 .NET LINQ概述
LINQ 语言集成查询 (LINQ) 是 Visual Studio 2008 中引入的一组功能,它在对象领域和数据领域之间架起了一座桥梁。可为 C# 和 Visual Basic 语言语法提供强大的查询功能。 LINQ 引入了标准、易学的数据查询和更新模式,该技术可以扩展为几乎支持任何类型的数据存储。Visual Studio 包含 LINQ 提供程序的程序集,借助这些程
2014-04-24 15:04:09 906
原创 .NET LINQ基本查询操作
获取数据源 在 LINQ 查询中,第一步是指定数据源。像在大多数编程语言中一样,在 C# 中,必须先声明变量,才能使用它。在 LINQ 查询中,最先使用 from 子句的目的是引入数据源 (customers) 和范围变量 (cust)。范围变量类似于 foreach 循环中的迭代变量,但在查询表达式中,实际上不发生迭代。执行查询时,范围变量将用作对 customers 中的每
2014-04-24 15:03:39 614
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人