2006年01月12日

常见.Net 英文专业词汇收集

abstract class    抽象类
accelerator   
快捷键
accelerator mapping   
快捷键映射
accelerator table   
快捷键对应表
access modifier   
访问修饰符
Access Pack   
访问包
access specifier   
访问说明符
access violation   
访问冲突
accessibility   
辅助功能
accessibility domain   
可访问域
Accessibility Options   
辅助功能选项
accessor   
访问器
action   
操作
Active Directory hierarchy    Active Directory
层次结构
active document   
活动文档
Active Document Containment   
活动文档包容
active end   
活动结尾
active object   
活动对象
active point   
活动点
Active Template Library   
活动模板库
ActiveX Component    ActiveX
组件
ActiveX control container    ActiveX
控件容器
ActiveX Control Interface Wizard    ActiveX
控件接口向导
ActiveX-enabled   
支持 ActiveX
adaptor   
适配器
Add key   
加号键
Add-In   
外接程序
Address Book   
通讯簿
address space   
地址空间
advise sink   
通知接收
aggregate   
聚合
Airbrush   
喷枪
algorithm   
算法
allocation hook   
分配挂钩
allocator   
分配器
Alternate text   
替换文字,备用文本
animation control   
动画控件
apartment-model threading   
单元模型线程
Apply Now   
立即应用

apply to similar    应用到相似项
argument   
参数
array initializer   
数组初始值设定项
array rank   
数组秩
arrow cap   
箭头帽
ArrowHourGlass   
箭头沙漏
ArrowQuestion   
箭头问号
article family   
文章族
assembly   
程序集;汇编
assembly manifest   
程序集清单
assert   
断言
associate   
关联
asynchronous moniker   
异步名字对象
asynchronous peek operation   
异步查看操作
atomic operation   
原子操作
attached table   
附加表
Attributed Component Wizard   
属性化组件向导
Attributed Programming   
属性化编程
Attributes Property    Attributes
属性
Authentication   
身份验证
authorable   
可创作(的)
Auto completion for commands   
自动完成命令
Auto Increment   
自动增加
Auto Syntax Check   
自动语法校验
automation   
自动化
automation-enabled   
启用自动化
base implementation   
基实现
be paged to disk   
分页到磁盘
binary operator   
二元运算符
bind   
绑定
binder   
联编程序
binding constraints   
绑定约束
bit field   
位域
bitmask   
位屏蔽
bitwise   
按位
bitwise complement operator   
按位求补运算符
bit-wise equivalent   
位等效数
bitwise OR operator   
OR 运算符
block   

block if    If

blocking UI   
模块化用户界面
Book Edition   
试用版
bootstrapper   
引导程序
bottom margin   
下边距
bound   
界限;绑定
bound control   
绑定控件
bounding rectangle   
边框
box   
装箱 (v.)
break   
分页;分行;中断 (v.);断点 (n.)
break compatibility   
破坏兼容性
break execution   
中断执行
breakpoint   
断点
Bring Forward   
上移一层
Bring In Front   
上移一层
Bring to Front   
置于顶层
broker   
中间装置
Browse With   
浏览方式
bubbling   
冒泡
bucket   
存储桶
buddy   
合作者
buffer   
缓冲区
build   
生成 (v.);版本 (n.);编译
Builder   
生成器
building block   
构造块
built-in   
内置
bulk row fetching   
批量取行
Bulleted List   
项目符号列表
business logic   
业务逻辑
business process   
业务处理
business rule   
业务规则
cache   
缓存
cacheability   
可缓存性
call   
调用
call back   
回调
call invoke   
调用 invoke(调用)
called procedure   
被调用过程
caller   
调用方
calling code   
呼叫代码
calling convention   
调用约定
calling process   
调用进程
call-out interception   
调出侦听
caption   
标题
caret   
插入符号
carriage return-linefeed   
回车-换行
cascade   
层叠,级联
case statement    case
语句
case-sensitive   
区分大小写
cast   
强制转换
catalog   
目录
catch block    catch

catch handler    catch
处理程序
category   
类别
caution   
警告
cell   
单元格
cell padding   
单元格填充
cell span   
单元格跨距
challenge-response   
质询-响应
check box   
复选框
check constraint    CHECK
约束
check in   
签入
check out   
签出
check state   
复选状态
check the entry   
检查项
check the number   
检查数目
checkout   
签出
child   
子级(注:单独使用);子(注:构成词组)
child code   
子代码
class   

Class Builder Utility   
类生成器实用工具
Class Library Reference   
类库参考
classic   
传统(型);传统风格(的);经典
clean   
无变动(注:与 dirty 相对)
client area   
工作区
Client Batch cursor library   
客户端批处理游标库
client coordinate   
客户端请求
client-based   
基于客户端的
client-side   
客户端
clip   
剪裁;剪辑
Clipboard format   
剪贴板格式
Clipboard-viewer chain   
剪贴板查看器链
clipping region   
剪辑区域
close parenthesis   
右括号
Close region   
临近区域
close up   
闭合
closing set of angle bracket   
结束双尖括号
closing tag   
结束标记
CLS compliant   
符合 CLS
clustered index   
聚集索引
code pane   
代码窗格
codebase   
基本代码
code-behind   
代码隐藏
Collapse to Definitions   
折叠到定义
Collate   
逐份打印
color scheme   
配色方案
column span   
列跨距
COM Classic    COM
传统型
combinator   
连结符
combo box   
组合框
command handler   
命令处理程序
Command line builds   
命令行编译
command routing   
命令传送
comment token   
注释标记
compact   
压缩;紧凑
compact version   
精简版本
comparer   
比较器
complex-bound   
复杂绑定
component   
组件
component authoring   
组件创作
Component Services   
组件服务
component tray   
组件栏
compose buffer   
写缓冲区
composition window   
撰写窗口
concatenation operator   
串联运算符
concurrency   
并发
Congratulations   
祝贺您
connection map   
连接映射
connection point   
连接点
considerations   
连接字符串
constituent control   
构成控件
constructor   
构造函数
constructor initializer   
构造函数初始值设定项
Consumer Template   
使用者模板
contextify   
实现上下文;对实现上下文
contiguous   
连续
contiguous range   
连续范围
contract   
连续范围
Control Containment   
控件包容
Control Flow   
控制流
conversion   
转换
Cookieless   
Cookie
coordinated universal time   
协调通用时间
Copy   
副本;复制
corrupt   
损坏
Cracker   
黑客
critical section   
临界区
cross-process   
进程间
cross-thread   
线程间
CSS Specific    CSS
特定
Cursor   
光标;游标
Custom Actions Management   
自定义操作管理
custom marshalling   
自定义封送处理
cycle through   
循环通过
Cyclic Redundancy Check   
循环冗余校验 CRC
Dangling Reference   
虚引用
data compartment   
数据舱
data consumer   
数据使用者
data store   
数据存储区
data-aware   
数据识别
database diagram   
数据库关系图
datagram   
数据报
DDE conversation    DDE
对话
deallocate   
解除分配;释放
decimal separator   
小数点分隔符
decorated name   
修饰名
Deep Copy   
深层复制
default case-insensitive hash code provider   
不区分大小写的默认哈希代码提供程序
default implementation   
默认实现
Defect Report   
缺陷报告
deformatter   
反格式化程序
degrade   
降低
degrade gracefully   
完全降低
delegate   
委托
delineated square   
画有边线的方形
denial of service attack   
拒绝服务攻击
Dep.   
部署,deploy的缩写
dependency   
依赖项
dependent file   
依赖项目
deploy   
部署
Deployment   
部署
deprecate   
否决
derive   
派生
derived   
导出();派生()
derived class   
派生类
derived field   
导出字段
derived type   
派生类型
deserialize   
反序列化
Designer Verb   
设计器谓词
destination   
目标
destination device   
目标设备
destination rectangle   
目标矩形
destroy   
损坏
destructor   
析构函数
detect   
检测
Developer   
开发者,开发人员,开发商
device   
设备
device dependent   
设备相关
Device Image   
设备映像
Devide key   
除号键
Diagram   
关系图
diagram pane   
关系图窗格
Diagram Surface   
关系图面
dialog   
对话,对话框
Diff-Merge   
差异-合并
digest authentication   
宿主;主应用程序;主机;主;承载
dimmed appearance   
浅灰色
directive   
指令
dispatch   
调度
dispinterface   
调度接口
Doc Relative   
与文档相关的
Dock   
停靠
dock   
停靠
dockable   
可停靠的
dominant   
主导
downcast   
向下转换
drop shadow   
投影
drop target   
放置目标
dump   
转储
Elapsed Time   
运行时间
Embedded   
嵌入式的
encapsulate   
封装
enclosing   
封闭的
encompassing   
包含的
Enlistment   
版本
entry   
条目,
enumerate   
枚举
enumerator   
枚举数
enum-type   
枚举类型
equivalent   
等效
Erase   
清除
escape   
转义
evaluate   
计算
evaluator   
计算器
exception   
异常
exception throw   
引发异常
exclusive OR    XOR
explicit   
显式
expose   
公开
extend   
扩展
Extensibility   
扩展性
face   
表面
factorability   
可分解性
fast line   
快速扫描线
favor   
优选的
feature   
功能
fetch   
获取
field   
字段
figure   
图形;图例;数据
Filled Rectangle   
实心矩形
filter   
筛选;筛选器
finalize   
完成
fire   
激发
flow off   
超出
footer   
脚注
For details, see   
有关详细信息,请参阅
foreign   
外部的
form   
形成,构造窗体;表单
Forms Authentication    Forms
身份验证
four headed arrow   
四向箭头
fractional-constants   
小数常数
Free Bytes   
可用字节
free threaded marshaler   
自由线程封送拆收器
free-form modeling   
自由窗体建模
friend   
友元
Full Control component   
完全控制组件
Full-Width Alpha-Numeric   
全角字母-数字
Full-Width Katakana   
全角片假名
fully populated   
完全填充
fully qualified name   
完全限定名
function profiling   
函数分析
function timing   
函数执行时间
Further Reading   
其他阅读材料
gain access   
获得访问权限
gain control   
获得控制
Gallery   

Garbage Collector   
垃圾回收器
general accounting module   
常规计帐模块
Gets or sets   
获取或设置
global   
全局的
Glyph   
标志符号
Gozer    Gozer
Gozer 处理
graphical representation   
图形化表示形式
grid   
网格
guarded section   
保护区域
Guide Settings   
参考线设置
Half-Width   
半角
Half-Width Alpha-Numeric   
半角字母-数字
Handle is not pinned   
句柄未被固定
handler   
处理程序
handy   
快捷
hard-code   
硬编码
hash   
散列 (v.);哈希
hatched pattern   
阴影图案
header control   
标头控件
heuristics   
试探法
hierarchical outline   
分层大纲
hierarchy   
层次结构
high-order   
高序位
horizontal guideline   
水平准线
host   
主机,宿主
Hotfix   
修补程序
hover   
悬停
hub and spoke model   
轮辐式模型
human-readable   
可读的
identity operator   
恒等运算符
illegal   
非法
illustrate   
阐释
IME   
输入法编辑器(Input Method Editor)
impersonation   
模拟
implementer   
实施者
implicit   
隐式
import   
导入,输入
in spec   
规格中
In this Section   
本节内容
incoming   
传入(的)
Independent   
独立
indexer   
索引器
Indicator Margin Click   
单击指示器边距
inference   
推理
infix notation   
中缀符
initial capacity   
初始容量
injected code   
插入的代码
injection attack   
注入式攻击
Inline   
内联
in-place   
就地
input mask   
输入掩码
Input Method Editor   
输入法编辑器
Install on Demand   
即需即装
instantiate   
实例化
Instantiate Live Controls   
实例化活控件
intaller   
安装程序
integrated   
集成的
Intellisense   
智能感知
interact   
交互
interface   
接口;界面
internal   
内部的
interoperate   
互用;交互操作
interrupt   
中断
intrinsic   
内部的
Invalid literal exponent   
无效指数
invocation   
调用
invocation list   
调用列表
Is Dirty   
已更新
isolated storage   
独立存储
issue   
发出
item   
条目;
iterate through   
循环访问
iteration   
迭代
jagged   
交错的
join   
联接
journal   
日志,日记
jump   
跳转
junction table   
联接表
Just-in-time   
实时
key   
关键字;键;项(注:与注册表有关时)
key as string   
键为字符串
key feature   
主要功能
key file   
密钥文件
keyset-driven   
键集驱动
keyset-type   
键集类型
kill   
注销;取消
Knowledge Base   
知识库
labeled statement   
标记语句
LAME!   
报告错误!
language equivalents   
等效语言
lead byte   
前导字节
least significant byte   
最低有效字节
ledger   
帐目型
left outer join   
左外部联接
less derived   
派生程度较小的
leverage   
(综合)利用;平衡
lexical scope   
词法范围
lifetime   
生存期
line break   
分行符
list box   
列表框
listener   
侦听器,侦听者
Lite control    Lite
控件
literal    literal
;文本
literal character   
原义字符
load factor   
加载因子
local   
局部的;本地的
local machine   
本地计算机
local storage   
本地存储区
Locale   
区域设置
locale   
区域设置
locator   
定位器
look up   
查阅,查找
lookahead   
预测先行
loop through   
依次通过
loosely coupled   
松耦合
low-order   
低序位
Macros Dialog   
宏对话
mainframe   
主框架;大型机
managed   
托管的
manifest   
清单
many-to-many   
多对多
map   
地图,映射
mapping mode   
映射模式
margin   
边距; 空白
margin indicator   
边距指示符
marquee   
字幕
marshal   
封送
marshal-by-reference   
引用封送
marshaler   
封送拆收器
mask   
屏蔽;掩码
Match Case   
大小写匹配
message pump   
消息泵
middle-tier   
中间层
migrate   
迁移
Misc   
杂项
Miscellaneous   
杂项
moniker   
名字对象
more derived   
派生程度较大的
More Information   
详细信息
more recent   
较新的
multibyte   
多字节
multicast   
多路广播
Multiple-Inheritance   
多重继承
Multiply key   
乘号键
mutually exclusive   
互相排斥
naked attribute    naked
属性
Naked Function Calls   
裸函数调用
named   
命名的
namespace   
命名空间
nanosecond   
毫微秒
narrowing conversion   
收缩转换
native   
本机
navigator   
导航器
New any   
新建项
New anyAttribute   
新建属性
New Technology file system    NTFS
文件系统
newline   
换行;换行符
No conversions are performed   
未进行转换
nonaggregated   
非聚集
non-scatter   
非散点程序集
notation   
表示法
nudge   
微移
Numbered List   
编号列表
Obfuscation   
模糊处理
object-oriented programming   
面向对象的编程
occurrence   
匹配项;(视上下文也可省略不译)
On button down   
当按钮按下
one-based   
从一开始的
One-Click Web Hosting   
鼠标一点,轻松发布到 Web
one-liner   
单行方式
one-to-many   
一对多
one-to-one   
一对一
open   
打开;开始;开放;左侧的(对于括号等成对的标记)
Open Database Connectivity   
开放式数据库连接
open parenthesis   
左括号
Open With   
打开方式
opening brace   
左大括号
opening tag   
开始标记
operator   
运算符;操作符
optimistic concurrency   
开放式并发
ordinal   
序号
Out of Memory   
内存不足
Out Parameter   
输出接口
outgoing interface   
输出接口
Outlined Rectangle   
空心矩形
out-of-band data   
带外数据
out-of-process   
进程外
Overall Steps   
全部步骤
overhead   
系统开销
overlap   
重叠
overload   
重载
Overload Induction   
重载归纳
overload resolution   
重载决策
overridable public function   
可重写的公共函数
override   
重写
Overview   
概述
overwrite   
改写
owned window   
附属窗口
owner-drawn   
所有者描述的
ownership   
所属权
pack pragma   
压缩杂注
package   
打包
Package Body   
包正文
padding   
空白,边距(n.);填充
pager button   
页导航按钮
pane   
窗格
pass over   
经过
pass-through   
传递
peek   
查看
peer   
对方;对等;对方主机;同级
pending   
挂起
per-column   
按列的;基于列的;针对于列的
permission   
权限
persistence   
持久性;持久性存储
persister   
持续程序
Pessimistic locking   
保守式锁定
pie section   
扇形区
pipe   
管道
plate   
盘片
pointer   
,指针
pointer-to-member   
指向成员的指针(n.)
policy class   
策略类
polymorphism   
多态性
populate   
填充
positioning   
定位
postback   
回发
post-processor   
处理器后
potential mod by 0   
潜在的以 0 求模
pragma   
杂注
precedence   
优先级
precompile   
预编译
predefined   
预定义的
preferences   
首选项
preprocessor directive   
预处理器指令
Presentation Tier   
表示层
primitive   
基元
principal   
用户;主体
process   
进程
profile   
详细资料
profiler   
分析器
profiling error   
分析错误
Program   
编程
programmatic access   
编程访问
progress   
进度
properly   
正确地,适当地
property   
属性
property attributes   
属性特性
provider   
提供程序
pseudo-marshalling   
伪封送
publisher   
出版商
push button   
下压按钮
put area   
放置区域
put pointer   
放置指针
put up modal UI   
提供模式用户界面
qualified name   
限定名
qualifier   
限定符
QuickStart   
快速入门
radio check mark   
选中标记
raise   
引发
Rapid Application Development   
应用程序快速开发
reader   
读取器;阅读器
realign   
重新对齐
rebar band    rebar
带区
rebar control    rebar
控件
Recordset   
记录集
recurrence pattern   
定期模式
recycle   
回收
Redistributable   
可再发行的
reference   
引用
registrar   
注册器
regular expression   
正则表达式
related   
相关的
related words   
相关字
render   
呈现
repeater   
重复器
repository   
储存库;库
reserve area   
保留区域
reset   
重置
reside   
驻留
resident   
驻留
resolve   
解析
resolver   
冲突解决程序
restore   
还原
Retail configuration    “
发布配置
rethrow   
再次引发
retrieve   
检索
revoke   
撤消
rework   
改编;返工
rich text   
多格式文本
right outer join   
右外部联接
root cause   
根源
Root Relative   
与根相关的
rootkey   
根项
round trip   
往返行程
routine   
例程
row-major   
行优先
Run Length Encoded   
行程编码
run-time library   
运行时库
salted hash    Salted
哈希技术
satellite   
附属
scatter assembly   
散点程序集
schedule   
安排 (v.)
schema   
架构
scope resolution   
范围解析
Scripting Host   
脚本宿主
Scriptlet   
脚本小程序
Section   
区域;章节
See also   
请参见
self-contained   
独立的
self-join   
自联接
self-referenced   
自引用的
semi-trusted   
不完全受信任的
Send Behind   
下移一层
serialize   
序列化
shadow   
影像;镜像
shallow copy   
浅表副本;浅表复制(copy 作动词时)
shared checkout   
以共享方式签出
shift the focus   
变换焦点
short circuit operator   
短路运算符
short delay   
短暂停留
shortcut key combinations   
快捷组合键
sibling   
同辈
signaled state   
终止状态
significand   
有效数
single tab stop   
单个 Tab 停靠
single-dimensional   
一维
single-document interface   
单文档界面 (SDI)
Single-Inheritance   
单一继承
sink   
详细资料;分析
size grip   
大小手柄
SizeAll   
四向箭头
sizing grip   
大小调整手柄
skeleton   
主干
slash   
斜杠
slider control   
滑块控件
smart pointer   
聪明指针
Snap-In   
管理单元
snap-in   
管理单元
snapshot   
快照
specific to   
特定于;针对
specifier   
说明符
spin button control   
数值调节钮控件
spin control   
数值调节钮控件
Split Vertical In   
左右向中央缩进
splitter   
拆分器
splitter window   
拆分窗口
spreadsheet   
电子表格
stack frame   
堆栈帧
stack walk   
堆栈审核
standalone   
独立
stand-alone   
独立
starter application   
起始应用程序
state bag   
状态袋
statement   
语句
stencil   
模具
step a frame   
通过一帧
Step By   
调试方式
Step Into   
逐语句;进入并单步执行;单步执行
Step Out   
跳出
Step Over   
逐过程
step through   
逐句通过
step unit   
单步执行单元
step-by-step   
逐步骤
step-by-step details   
详细步骤信息
step-by-step topics   
分步指导的主题
stock   
常用
straight quotation marks   
直引号
streamer   
流转化器
stress test   
压力测试
string literal   
字符串
stroke list   
笔画列表
stub   
存根
subkey   
子项
subscriber   
订户
subsequent   
后面的
Substract key   
减号键
superimposed   
叠加的
Surpress banner   
取消显示版权标志
surrogate    web

symbol store   
符号存储区
symmetric key   
对称密钥
tab   
选项卡
Tab Order    Tab
键顺序
Tabbed   
选项卡式的
tear-off   
分开的
Technical Assistance   
技术支持
technical note   
技术说明
Technote   
技术说明
Templated   
模板化的
terminating line number emission   
显示终止行号
This feature will remain uninstalled   
将不安装此功能
thread   
线程
threading   
线程处理
threading model   
线程模型
threshold   
阈值
tick   
刻度
tick mark   
刻度线
tier   

tightly coupled   
紧耦合
to be supplied   
待提供
to be written   
待补
To Fit   
合适大小
token   
标记
Top margin   
上边距
top-level   
顶级
trace into   
跟踪到
trackbar   
跟踪条
trail byte   
尾字节
transient   
瞬态
trap   
捕获
trappable   
可捕获的
trigger   
触发;触发器
truncate   
截断
type specifier   
类型说明符
typed   
类型化的
typelib   
类型库
typographic   
版式
UI   
用户界面
unattended execution   
无人参与执行
unbox   
取消装箱
underlying   
基础
unescaped   
非转义的
unit   
单位,单元
Universal Coordinated Time   
协调通用时间
unmanaged   
非托管的
unmarshal   
取消封送 (v.)
unsized   
未确定大小的
upper bound   
上限
upstream   
上游
usage data   
惯用数据
user interaction   
用户交互
user-drawn   
用户描述的
utility   
实用工具
validator   
验证程序
versionable   
无版本冲突的
View   
浏览,视图
virtual   
虚拟
Walkthrough   
演练
web farm    web
,web
web garden    web

Web-crawling    Web
爬行遍历
wedge button   
三角形按钮
well-behaved   
功能良好的
well-defined   
定义完善的
Whitespace   
空白
wide-character   
宽字符
widening   
扩大
worker thread   
辅助线程
Workspace   
工作区
wrapper   
包装
zero-based   
从零开始的
zomby   
僵停

2006年01月11日

1:请你分别划划OSI的七层网络结构图,和TCP/IP的五层结构图? 

OSI七层:应用层;表示层;会话层;传输层;网络层;数据链路层;物理层。

TCP/IP:应用层;传输层;网络层;数据链路层;物理层。

工作在OSI模型下的网络设备

物理层:中继器、集线器、还有我们通常说的双绞线也工作在物理层
   
数据链路层:网桥(现已很少使用)、以太网交换机(二层交换机)、网卡(其实网卡是一半工作在物理层、一半工作在数据链路层)
   
网络层:路由器、三层交换机
   
传输层:四层交换机、也有工作在四层的路由器

交换机最高还有七层的交换机,应用在电信骨干网络,提供网络高带宽和低时延
2
:请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用? TCPUDP呢? 

IP协议(Internet Protocol)又称互联网协议,是支持网间互连的数据报协议,它与TCP协议(传输控制协议)一起构成了TCP/IP协议族的核心。它提供网间连接的完善功能, 包括IP数据报规定互连网络范围内的IP地址格式。

传输层主要为两台主机上的应用程序提供端到端的数据通信,它分为两个不同的协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP协议提供端到端的质量保证的数据传输,该层数据分组、质量控制和超时重发等,对于应用层来说,可以忽略这些工作。 UDP协议则只是提供简单的把数据报从一端发送到另一端,至于数据是否到达或按时到达、数据是否损坏都必须由应用层来负责。这两种协议各有各自的用途,前者可用于面向连接的应用,而后者在及时性服务中重要的用途,如网络多媒体通信等。
3
:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的? 
   
交换机的功能都是在数据链路层实现。数据链路层的作用主要是控制数据流量,处理传输错误,提供物理地址(没有逻辑地址),以及管理对物理介质的访问。通过使用不同的链路层协议,网桥可以实现上述所有的功能。目前较为流行的链路层协议包括:以太网,令牌环以及FDDI等。

交换机的功能实现原理并不复杂,主要是通过分析流入的数据帧,根据帧中包含的信息做出转发决策,然后再把数据帧转发到目的地。网桥对数据帧的转发分为两种形式,如果使用的是源路径网桥技术,那么每一个数据帧中都已经包含了到达目的地的完整路径;如果使用的是透明网桥技术,那么每一次数据帧都会被转发到下一个节点并最终到达目的地。

路由器是一种典型的网络层设备。它是两个局域网之间接帧传输数据,在OSI/RM之中被称之为中介系统,完成网络层中继或第三层中继的任务。路由器负责在两个局域网的网络层间接帧传输数据,转发帧时需要改变帧中的地址。

路由器(Router)是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,可通过路由器来完成。因此,路由器具有判断网络地址和选择路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。它不关心各子网使用的硬件设备,但要求运行与网络层协议相一致的软件。路由器分本地路由器和远程路由器,本地路由器是用来连接网络传输介质的,如光纤、同轴电缆、双绞线;远程路由器是用来连接远程传输介质,并要求相应的设备,如电话线要配调制解调器,无线要通过无线接收机、发射机。

 

 

一般说来,异种网络互联与多个子网互联都应采用路由器来完成。

 

 

路由器的主要工作就是为经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效地传送到目的站点。由此可见,选择最佳路径的策略即路由算法是路由器的关键所在。为了完成;这项工作,在路由器中保存着各种传输路径的相关数据——路径表(Routing Table),供路由选择;时使用。路径表中保存着子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路径表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由器自动调整,也可以由主机控制。


4:
请问C++的类和C里面的struct有什么区别? 
c++中的类具有成员保护功能,并且具有继承,多态这类特点,而c里的struct没有

5:
请讲一讲析构函数和虚函数的用法和作用? 
析构函数一般在对象撤消前做收尾工作,比如回收内存等工作,虚拟函数的功能是使子类可以用同名的函数对父类函数进行重载,并且在调用时自动调用子类重载函数,如果是纯虚函数,则纯粹是为了在子类重载时有个统一的命名而已。(说得不是很确切,自己随便找本c++的书都有说明)

6:
全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的? 
全局变量的生命周期是整个程序运行的时间,而局部变量的生命周期则是局部函数或过程调用的时间段。其实现是由编译器在编译时采用不同内存分配方法。全局变量在main函数调用后,就开始分配,如果是静态变量则是在main函数前就已经初始化了。而局部变量则是在用户栈中动态分配的(还是建议看编译原理中的活动记录这一块)

2006年01月10日
主  题: 请教指导?对于一个没有太多的基础的想在3个月左右可以学习到感觉可以找工作的语言?学习什么好呢?我知道VC是好 但它好象是太难了,学习
作  者: pengpaiboy ()
等  级:
信 誉 值: 100
所属论坛: .NET技术 VC.NET
问题点数: 10
回复次数: 7
发表时间: 2004-11-30 13:48:50

请教指导?对于一个没有太多的基础的想在3个月左右可以学习到感觉可以找工作的语言?学习什么好呢?我知道VC是好 但它好象是太难了,学习C#怎么样?将来C#的发展怎么样?一般的应用程序是不是也都可以做。C#主要开发那些方面的程序比较多些,待遇又如何?是不是较VC简单了许多,3个月左右可以学好吗?现在公司招C#的程序员多吗?谢谢高手的指导?在这里不胜感激?
回复人:youngby(C-love) ( 一星(中级)) 信誉:100 2004-11-30 13:56:05 得分:0
?

不用问.学就是了.


Top
回复人:hbxtlhx(踏雪寻岩) ( 两星(中级)) 信誉:106 2004-11-30 14:00:51 得分:0
?

如果楼主想在三个月内就可以达到一个专科或本科水平的毕业生,那就不用在这里问这个问题了!

你最好搞清楚,你的志向是什么!
Top
回复人:foyuan() ( 二级(初级)) 信誉:100 2004-11-30 14:05:34 得分:0
?

如果你是为了只是为了钱做程序,建议楼主改行
呵呵
赚钱的行业很多地
Top
回复人:woaini123() ( 一级(初级)) 信誉:100 2004-11-30 14:17:45 得分:0
?

因为我才开始学习编程。没有什么基础 只是在学校里学习了一点C语言的书,也没有太深的学习。我现在想学习一门 不知道学习什么好些?可以容易上手些。
Top
回复人:zzcboy(北斗) ( 二级(初级)) 信誉:99 2004-11-30 16:55:47 得分:3
?

对一个希望步入编程世界的新同志,楼上几位除了讥讽和刻薄,就不能给一些积极的建议了吗

和其它任何语言一样,C#想学好是不容易的,不过你的当前目标是混口饭吃的话,3个月的时间很充裕。学习过程中,尽快结束书本理论知识学习的阶段,自己动手实践很重要。做出些看的见得东西出来,找工作时会有用的。不是说理论基础知识不重要,我认为真正的学习都是从切实的做项目开始的,所以应想办法尽快找到一份工作,让自己有机会去学习。之前的"自学"应适可而止,多了就是浪费时间。


Top
回复人:lzhliang() ( 一级(初级)) 信誉:100 2004-11-30 17:13:05 得分:4
?

我觉得学什么都可以,重要的是要有个好的老师。我以前自己学过Java,学了很就好像效果不大,现在学校读,效果比较好。而且市面上好的教材不多,我现在的课程没有开之前,买了些书,现在感觉都是垃圾。很多例程都是错误的。推荐C# for Experienced Programmers,没有基础也可以读。个人觉得比较适合初学者。
建议找个好的老师指导。
Top
回复人:lzhliang() ( 一级(初级)) 信誉:100 2004-11-30 17:17:15 得分:3
?

ps:尽量不要看那些中文的指导书,反正我买了三本,都是没有用的东西,还一堆错误。建议看英文书。三个月时间够用了。我课程如下:基础语法1个礼拜,oo一个礼拜,sql一个礼拜,Ado.net一个礼拜,asp.net四天。如果肯用功,感觉不会吃力。

程序员的.NET时代——李洪根(本文首发于《CSDN开发高手》2003年第12期)

        技术总是在不断发展,微软.NET平台经历了三年时间的历程,已经被广大开发人员所接受。我们利用Visual Studio.NET,可以快速、高效地进行Windows Form和Web Form的应用开发。.NET是一个全新的概念,.NET代表了一个集合、一个环境、一个编程的基本结构,作为一个平台来支持下一代的互联网,因为我们相信世界不会倒退到集中计算的主机模式下。在XML Web Service技术逐渐成熟的时候,软件可被当作一种服务,支持新的设备,这些设备包括PC、移动电话、PDA、车载系统和机顶盒等,实现相关设备协同工作,给用户带来全新的体验,微软演绎着一场新的互联网革命。作为.NET开发人员,我们应该会对未来充满信心。

      程序员是这场互联网革命的推动者,我们大家都在不断的学习技术、充实自我,以适应未来的变化(在这里我不想进行.NET和JAVA的比较,因为这两个领域的技术各有所长,而且涵盖的范围都相当广,单纯进行语言的比较是没有意义的)。微软用.NET为未来十年做了准备,所以当务之急,必须掌握.NET开发工具这个利器,来构建我们的应用。其实.NET入门也是比较容易的,一般来说,基本掌握.NET程序设计三个月就够了,半年以后,你就会成为一个合格的.NET程序员。如果想成为.NET领域的高手,那就得在这个领域积累非常丰富的经验。

       .NET是这十年中比较流行的开发工具。我用.NET开发已有两年多时间了,现将我的学习经验和方法和大家分享。系统地学习.NET需要一个循序渐进的过程,我们分为入门级和提升级。如果你是入门者,下面的每个学习阶段都是很重要的。假若你对.NET比较了解,可以选择你的需要的知识进行学习。

入门篇

1.         学习面向对象(OOP)的编程思想

许多高级语言都是面向对象的编程,.NET也不例外。如果您第一次接触面向对象的编程,就必须理解类、对象、字段、属性、方法和事件、封装、继承和多态性、重载、重写等概念。需要说明的是,微软的产品帮助文档做得非常完善,而且查询相当方便,入门者不得不看。安装完Visual Studio.NET2003(或者Visual Studio.NET 2002)后,在“程序”组里有一个Visual Studio 组合帮助集合。初学者从帮助文档就会获得许多知识。

 

2.         选择一门语言,学习语法及相关基础知识

选择语言的标准:根据你自己的需求和个人的技术背景。在.NET平台下,C#、VB.NET都是调用Framework的类库,效率基本一样,C#的语法严谨,适合以前C++、VC的程序员。VB.NET不区分大小写,写法随意一些.,自动缩进,适合以前VB的程序员,微软也一再提倡用VB.NET进行快速开发。VC++.NET更接近底层,可以用托管和非托管两种方式进行编程。

选择了需要使用的语言后,我们需要了解语言的语法规则,包括语句、类型、表达式、运算符、函数等等,我建议一开始写程序就要养成良好的编程风格,规范地进行变量的命名,在代码中写好注释。这对以后的软件开发生涯都是很有意义的。

 

3.         理解.NET思想并熟悉框架类库(Framework Class Library)

我们借用一幅图来说明一下公共语言运行库(CLR)、框架类库(FCL)与应用程序之间以及与整个系统之间的关系。


首先,我们要了解公共语言运行库、程序集、通用类型系统的概念。在此基础上,学习.NET框架类库。.NET 框架类库是一个与公共语言运行库紧密集成的可重用的类型集合。.NET 框架类库封装了大部分Win32 API ,许多以前需要调用API才能实现的功能,在.NET下非常容易就实现,许多情况下只需要一句话就足够了。所以,我们在程序设计的时候要尽量避免调用Win32 API。学习.NET 框架类库的捷径:掌握常用的类库,其它不常用的类库只需要了解,用到的时候查阅即可。

 

4.         利用Visual Studio.NET写程序

在.NET平台下写程序我们一般用微软的开发工具Visual Studio.NET,因为一个好的IDE,能极大地提高开发效率。我建议初学者从Windows Forms或者是Web Form开始,等有一定的基础之后,再转向写类库或是控件、组件方面的东西。微软的帮助文档里自带许多示例,我们可以一边看帮助,一边进行演练。在学习其中的代码的同时,一定要理解和思考。多写代码、从项目中锻炼是编程高手的成长之路。记住:一定要多看多写源代码;多上论坛(如CSDN和Dev-club)和微软的新闻组讨论技术问题。

我们一定要用好Visual Studio.NET这个集成开发环境,除了编写代码外,我们还要了解.NET的部署原理,学习打包、部署及管理应用程序。多人开发的项目可以考虑用Visual Source Safe进行源代码管理,这一系列开发工具的使用都要有大量的实践。

 

推荐书籍:

《C#高级编程》(第二版)(清华大学出版社)

《Microsoft.NET程序设计技术内幕》(清华大学出版社)

《 Visual VB.NET技术内幕》 (清华大学出版社)

《 Visual C#.NET技术内幕》 (清华大学出版社)

.NET入门教程(包括Windows Form和Web Form):

http://chs.gotdotnet.com/quickstart

 

5.         最好掌握大型数据库编程

一般来讲,大多数软件开发都涉及到数据库。大部分软件的后台数据库都使用如Access、SQL SERVER、Oracle等。ADO.NET提供了对关系数据、XML 和应用程序数据的访问。我们必须掌握Connection、Command、DataReader 和 DataAdapter 对象的使用,正确运用DataSet数据集和DataView进行数据操作。当然,要有一定的数据库基础,包括表、视图、存储过程等的使用。必须把后台数据库和前台的ADO.NET都掌握好,才能真正精通数据库编程。

在项目的开发中,建议使用数据访问应用程序块(Data Access Application Block)来简化SQL查询。微软msdn网站有下载,我们可以利用SqlHelper类进行的数据访问,使用起来非常简单,很容易地构建我们的数据访问层。参考微软MSDN文档:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.asp

 

推荐书籍:

《ADO.NET技术内幕》(清华大学出版社)

《ADO.NET高级编程》(中国电力出版社)

《VB.NET和SQL Server 2000高级编程—创建高效数据层》(清华大学出版社)

 

6.         学习XML WEB Service

XML Web services 正在开创一个分布式应用程序开发的新时代。XML Web Services 是把软件当成服务的一种体现,通过使用 XML 消息处理启用数据交换和应用程序逻辑远程调用。XML使数据能够通过防火墙,实现异类系统之间移动数据。虽然公共的Web Services还不是很普及,但是在一些企业中,已经涉及到了Web Services的开发。用Visual Studio.NET 很容易创建Web服务,调用Web服务也相当简单,只需要添加一个Web引用,然后调用即可。进行这方面的学习,需要了解Web 服务描述语言 (WSDL)、SOAP协议等。

 

推荐书籍:

《构建XML WEB服务:基于Microsoft.NET平台》(清华大学出版社)

《Building XML WEB Services for the Microsoft .NET Platform》(影印版)

 

.NET技术网上资源:

中国软件网(中国最大的技术社区)

http://www.csdn.net

计算机世界开发者俱乐部

http://www.dev-club.com

中国Dot Net俱乐部

http://www.aspx.cn

微软官方MSDN权威站点:

http://msdn.microsoft.com

微软官方ASP.NET站点:

http://www.asp.net

微软官方Windows Form站点:

http://www.windowsforms.net

微软官方Dot NET站点:

http://www.gotdotnet.com

英文站点Code project:

http://www.codeproject.com

 


************************************************************************

提升篇

1.         学习.NET框架开发平台底层原理和体系结构

.NET框架的核心是公共语言运行时(Common Language Runtime,CLR)。通常情况下,我们使用一种高级语言(如C#或者VB.NET)编写程序,这些高级语言的编译器产生的是一个托管模块(即中间语言IL代码)。托管模块是一个需要CLR才能执行的标准Windows PE文件。执行中间语言代码的时候,CLR中的即时编译器(Just-in-time,简称JIT) 把其转换成CPU指令。这中间有许多细节,包括怎么初始化CLR,微软组件运行时执行引擎MSCorEE.dll(Microsoft Component Object Runtime Execution Engine,在system32目录下)怎么工作等等。如果你想精通.NET技术,就必须对.NET框架原理、程序集、元数据、值类型/引用类型、类型设计、异常处理、自动垃圾回收等核心技术有一个清楚的认识。

 

推荐书籍:

《.NET框架程序设计》(修订版) (清华大学出版社)

《Applied .NET Framework Programming》(影印版)Jeffrey Richter著

《.Microsoft .NET IL汇编语言程序设计》

《.NET 本质论》(中国电力出版社)

 

2.         熟练运行底层工具进行调试和解决各种问题

了解.NET平台的底层原理,我们需要学会一些工具和CLR 调试器 (DbgCLR.exe)的使用。C# 命令行编译器(Csc.exe)和VB.NET编译器(Vbc.exe)的重要性就不用再多说。

.NET 框架 SDK 提供的几个比较重要的工具是:MSIL汇编程序(Ilasm.exe)、MSIL反汇编程序 (Ildasm.exe)、程序集链接器 (Al.exe)。强烈建议大家在开发中多使用MSIL 反汇编程序 (Ildasm.exe),以加强对CLR和底层的了解。MSIL 汇编程序(Ilasm.exe)从 MSIL 汇编语言生成可移植可执行的 PE 文件。反汇编程序(Ildasm.exe) 可对任意 .NET 框架 .exe 或 .dll 程序集进行分析,并以可读的格式显示信息。程序集链接器 (Al.exe) 从一个或多个文件生成一个带有程序集清单的文件。.NET框架SDK还提供许多其它的工具,如:PEVerify 工具 (Peverify.exe)、强名称工具 (Sn.exe)等,我们力求能用命令行的方式使用他们。

需要指出的是:Visual Studio.NET不是能完成所有命令行能做的工作,一些任务必须由命令行来完成。如:创建多文件程序集,必须求助于csc.exe的addmodule选项。只有在对.NET 框架有很深理解的基础上,才会灵活运用这些工具。

 

3.         进行大型软件系统架构设计

进行软件系统的架构设计,需要积累相当丰富的经验,要求我们从全局的概念上把握软件的总体结构。首先的一点是,我们必须参照软件需求说明书。需求说明书是用户和开发双方对所开发软件的功能、性能、用户界面及运行环境等做出详细的说明,所以我们设计软件必须以此为依据。接下来,我们要做软件的总体设计,即概要设计。一般需要根据软件的业务需求和业务流程进行模块划分,规划程序的总体结构、输入输出以及接口设计、运行设计、数据结构设计和出错处理设计等,为详细设计奠定基础。在详细设计中需要指出每一模块是怎样实现的,包括实现算法、逻辑流程、数据流程图等。以后的工作,就是程序的实现。测试是和编码同步进行的,必须严格把好质量关。

在用.NET开发大型系统的时候,一般都是做成三层(或是N层)结构的形式。即将应用程序逻辑地分为3个基本层:数据访问和存储、业务逻辑层、表示层。三层结构的优点主要是:可扩展性、可伸缩性和灵活性。在做Web应用的时候,可以考虑采用MVC(模型-视图-控制器 Model-View-Controller)模式让Web应用程序的用户界面功能实现模块化。

顺便要说的是,大型软件有时需要整合多种产品,来满足企业级的应用需求。微软提供了许多Server产品,如SQL Server 、Exchange Server、Share Point Server、BizTalk Server等。记住:大家一定要多了解微软的产品线,微软很多技术都是相符相承的,结合起来才能发挥作用!我们可以微软的Server级产品的基础上整合软件系统、实现数据共享访问、终端设备上的电子邮件、消息协作。总之,通过互联网,让所有人一起协同工作,是未来软件的发展趋势。我们把握好这些方向,就等于驾驭未来。

 

推荐书籍:

《使用 Microsoft .NET 的企业解决方案模式》微软出版社

《Enterprise Solution Patterns Using Microsoft .NET》 MS Press

 

网上资源:

软件工程专家网

http://www.51cmm.com

UML软件工程组织

http://www.uml.org.cn/

http://www.umlchina.com

 

4.         带领团队进行软件开发

一个好的团队,才能开发一个成功的产品。软件开发主要由项目管理团队、软件开发团队、软件测试团队组成。项目管理人员主要对项目进行控制,协调开发人员、测试人员的工作。开发人员的工作主要是负责软件的实现。测试人员是软件产品的质量保障。其它人员,如产品规划方面、软件技术支持和文档、后勤都是不可缺少的。

大型软件是许多人集体智慧的结晶,要求Project Leader有较强的管理能力和技术背景,以及良好的沟通能力。如果你作技术的时间很长,积累了丰富的经验,做过项目组长等管理工作,通过不断的学习和提升,极有可能成长为Project Leader。如果你已是Project Leader,就到对软件的成败负责,你可以根据现有资源决定开发中任务分配,合理用人,决定功能模块是否值得开发,项目进度控制等许多问题。总之,带领团队的人必须有远见卓识,采取正确方法引领团队取得成功。

 

推荐书籍:

《人月神话》清华大学出版社

《人件》清华大学出版社

 

 

技术展望

 

1.无缝计算(Seamless Computing)

目前,大部分的应用还局限于桌面系统。在过去的二十年,软件定义了信息时代,但受到硬件的局限。今天,软件决定了数字时代。“无缝计算”是一个软件创新框架,旨在消除不同软件系统之间所存在的界线,无缝计算概念就是要以无缝的方式发挥硬件的全部能力。软件的根本性创新应在网络化系统、信息驱动型软件和多媒体用户接口等领域中体现出来。未来,软件将不再受制于硬件功能。软件将帮助人们更好地协同作业,逐步实现为人们提供理想工作环境的无缝计算。微软推出的Windows Server 2003、Office System 2003、Visual Studio.Net、Web Service,以及今后发行的SQL Server “Yukon” 、Windows Longhorn则是无缝计算的基础。比尔.盖茨在Comdex 2003会议上承诺:要为无缝计算提供全方位的框架与服务。无缝计算──的确值得我们期待!

 

2.无线通信

在无线通信方面,用.NET进行移动开发,实现所有设备终端协同工作。微软在2003年已推出精简版的.Net 开发框架(.Net Compact Framework)。它和Smart Device Extensions (SDE) for Visual Studio .NET 一起,将更强的开发能力和强大的编程平台带到了移动设备(如PDA、移动电话、机顶盒和各种运行Window CE .NET操作系统的嵌入式设备)的开发工作中。今后的无线通信市场更加巨大,微软和各大厂商的合作,将使用.NET进行移动开发的人员更加受益。

 

总结:

.NET是一个划时代意义的概念,可以说未来十年内,会有更多的软件开发商使用.NET。我们可以看到,现在的VS.NET功能已经很强大了。而且微软的开发工具会更加完善,每一个新版本的VS.NET都比上一版本有许多提升。以后将会有更多程序员步入.NET阵营,程序员的.NET时代,将会极大提高生产率。设想如果世界上的每一台服务器都运行一个Web Service,提供一个 Web API,每个API都能完成一个强大的功能,这是一个多么强大的环境啊!我们期待这所有的一切。现在,我们要做的是:掌握好今天的.NET,迎接明天的辉煌。

2006年01月09日
.NET重要技术思考
.NET Remoting
     从COM(Component Object Model)时代到DCOM(Distributed COM),微软扮演了一个推动者的角色。如果说COM提供了一个Windows平台上的对象通讯技术,并且逐渐成为应用程序之间彼此通讯及互动的技术主流,那么DCOM则是解决了计算机的通信和互动技术。
    COM的着眼点是在于同一台计算机上不同应用程序之间的通讯需求,跨到另外一台计算机之外,就不是一开始COM所设想到的领域。所幸跨程序的通讯和跨计算机的通讯差异仅在于通讯协议的处理(也就是定位问题),对于数据交换上型别差异的处理并不会因此而有区别。所以要让COM的环境能更进一步延伸到跨计算机的领域,只要妥善解决计算机定位的需求,就有机会克服。同样幸运的是,COM在一开始的设计中完全不去碰触跨计算机的问题,使得要在COM的架构之上再架上一层跨计算机的处理环境并不会去破坏到原本的架构。于是COM的网络延伸版本DCOM(Distributed COM)就此出现,专责让COM组件可以在网络环境下持续提供服务。DCOM最主要处理的是两个议题,第一个议题是网络通讯能力,第二个议题则是权限的问题。之前COM是在同一台计算机中找特定的组件,而DCOM则要更进一步去找网络上的某台计算机,之后沿用COM的机制找到计算机上的组件。
    到了.NET当中,跨计算机的问题同样也需要对应的技术进行处理,.NET Remoting就是一个对应于DCOM的技术,它让存活在不同应用程序域(AppDomain,一个 .NET中的新概念)、不同执行程序、以及不同计算机上的对象能够顺畅的进行沟通协作。在累积了长期以来分布式应用的经验之后,微软没有理由把东西设计的更难用。从某种意义来说,.NET Remoting提供了比过去更易于使用的开发架构,用来来支持跨计算机的沟通作业,省却开发人员建立分布式应用程序时必须花费的心力,不过这样一个“出色”的分布式应用应用框架并没有得到本来应该得到的“待遇”。相对于Java的RMI而言,它更加简单同时保持设计方面的弹性,同时摈弃了DCOM的一些缺点,在对于一个前后端必须以有状态紧密结合方式进行互动作业,同时又期望呼叫和数据交换的动作上能以最有效的方式进行的环境而言,.NET Remoting是一个比较恰当的选择方案。
    可是问题在于微软本身对于XML Web Services的狂热推崇让.NET Remoting迷失了本来属于它自己的阵地,也就是说XML Web Services的过火让.NET Remoting忘记了自己应该承担的角色,于是在开发者眼中成为了一个“可有可无”的作品,至少对于很多开发人员而言,在需要创建分布式应用程序的时候首先考虑的是XML Web Services,而在于企业内部应用,特别是在可以控制服务器和客户端平台的情况下(比如完全基于.NET平台的应用),Web Service因为效率等等各个方面的原因并无法体现出优势。从技术本身来讲,.NET Remoting是一个非常出色的架构,但在商业方面,这是一个失败,毕竟,设计一个出色的产品然后束之高阁难免“不像话”。
    .NET Remoting恰恰是这个战略的牺牲品,虽然拥有与生俱来的优点,不过依然生不逢时。
Enterprise Services
    从一个很直接的感觉来说,Enterprise Services只是对于COM+的一个包装,从使用方式和技术实现本身而言,和VB或者VC下使用COM+服务没有本质的区别,而更多的只是在于多了一层托管代码的包装,让.NET开发人员能够比较顺利的使用这些服务的功能。
     相对于J2EE平台上的应用服务器如BEA的WebLogic,IBM的WebSphere或者开放源代码的JBoss,微软是希望能够在企业级应用之中分一杯羹,可是因为先天不足的原因,在企业应用中需要的事务、负载平衡、故障转移等等技术中的表现不是那么尽如人意,至少缺乏非常清晰的应用服务器(Application Server)的概念,虽然微软不止一次的强调操作系统本身就是一个应用服务器,一个IT信息的基础结构。但是从开发人员实际的使用来看,这是一个“晦涩难懂”的产品。
    虽然.NET Framework改变了很多东西,但是作为企业级应用中最重要的支撑技术——事务和服务,并没有得到同等程度的发展,我想这个也就是很多大型企业应用目前不选择.NET的一个理由吧,毕竟从MTS——COM+——Enterprise Services,这一路走来微软始终不是提供一个非常透明的机制让开发人员去控制各个环节(可能和微软一贯以来的策略有关,只是关心最广泛的应用而不是最高端的应用),而.NET中的所谓企业服务,和竞争对手提供的相当的EJB还是有比较大的差距,这是一个日前的微软无法解决的软肋。
Web Service
    从一开始,微软就将其作为“重头戏”推出,并且饶有意思的增加了XML,然后那个“XML Web Services”就成为了.NET战略中一个非常重要的术语,就如微软的白皮书所言“Microsoft® .NET 是Microsoft XML Web Services 平台”,微软通过.NET来改变现有的互联网络结构,“Windows正在走向过去”这样的宣传是在于希望各个子系统之间的通信完全基于Web Service,那样的话,作为Win32开发人员一直困扰的组建注册,分发等等一系列问题都能够得到解决,并且能够用更多的语言更多的平台去开发应用。
     “一切皆是Web Service”,这是一个冒进的举动,至少对于4年以前的世界,而这四年以来,虽然Web Service有很多很多的优点可以让我们“歌功颂德”,但是不是“万金油”,比如一直称垢的性能和安全问题也阻碍了Web Service一统天下,于是其他分布式应用架构在特定的领域依然能够有自己的生存空间。
    这一次,微软高估了Web Service,虽然目前的.NET是实现XML Web Services最好的平台,Visual Studio .NET也提供了从上至下的包装,让开发人员完全可以不关心协议的底层实现,比如SOAP,比如对象序列化,比如WSDL,因为一切的一切都可以在IDE中自动完成。我们不否认因为.NET,Web Service从概念已经走进应用,而WSE 2.0的出台更加Web Service具备了互操作能力,不过依然无法改变开发人员的观点,只有在企业外网应用集成或者内部异种平台整合的时候才能够体现出优势,在于需要高度响应和服务支持的应用方面,Web Service只是一个臆造的神话。
ASP.NET
    我们无法否认,这项技术对于开发人员而言是一个颠覆性的改变,从静态的HTML到CGI再到ASP/JSP/PHP时代,我们都必须去了解HTML,了解HTTP,对于高水平的开发人员而言,需要掌握的还远远不止这个,在脚本横行的时代,我们必须很清楚的去了解实现的各个细节,包括HTML,JavaScript,CSS,还有和服务器相关的Request、Response。最直接而言,开发人员必须严格控制所有HTML及其相关内容的产生,脚本带来的只是一个相对于CGI层次更加高级的“自动化”罢了。
    然后,ASP.NET将这一切完全改变,WebForm让Web开发人员能够和Windows开发人员一样处理页面事件,同时可以完全的访问强大的.NET Framework类库,而且预先编译机制解决了ASP一直以来的效率低下问题。而在服务器端的设计,在原先ISAPI的基础上从新实现了HttpHandler和HttpMoudle,从而为开发人员提供了高度扩展的可能,而日前比较成熟的WebLog引擎.Text正是这些技术的经典之作。
    XML Web Services的内置集成则使ASP.NET成为Web Service应用的最好实现,日前市场上相当大部分的Web Service都是基于ASP.NET的,在这点方面ASP.NET已经远远超出Java社群的技术,包括JSP,包括Struct,包括JSF还有其他相关的Web应用技术,在ASP.NET都能够得到非常好的集成。
    我们不可能否认这个事实,相当大一部分(我个人认为是大部分)的开发人员转向.NET是因为ASP.NET,对于ASP开发人员而言,ASP.NET提供了更加强大的功能,很多在ASP中必须依赖组件技术来解决的问题比如文件上传在新的平台上已经成为内置支持,当然更加重要的是依赖Visual Stuio.NET强大的集成开发环境能够成倍的提高生产率。而另外平台的开发人员转向ASP.NET我想也是因为弹性的设计及其便捷的开发,我相信没有太多人会怀疑ASP.NET已经走在Web开发的最前沿。
    当然,任何事情没有绝对的完美,在.NET Framework 1.1(也就是.NET的第二个版本)之前,太多的Postback也是让开发人员抱怨之处,而且采用WebForm的开发方式让很多开发人员不是那么容易的处理客户端脚本,所有的事件实现都是依赖于ViewState,因此在低带宽下的网络应用,不断地提交也让有些用户感到“恼火”。
    这个世界没有绝对的完美,但是会一点一点走向完美,也许ASP.NET 2.0就有太多东西值得期待。
ADO.NET
    相信大家不会忘记ADO(ActiveX Data Object),我想Windows上面数据库开发流行它功不可没,通过统一的接口来实现对于数据库的访问,从而屏蔽复杂的数据库访问协议。而到了.NET时代,ADO.NET进一步将数据访问“进化”,不要以为ADO.NET只是ADO的一个升级,在ADO的技术上提供了一个托管类库,除了都是数据访问框架,其他没有太多本质的关联。
    虽然ADO.NET带来的震撼远远不如其他技术,可依然有很多东西值得我们去欣喜,毕竟创新总是一件好事情,何况是这个最成功的软件公司带来的创新,那么我们就来看看到底带来了什么:
1.除了提供了传统ADO的Connection,Command以外,我们意外的没有看到Recordset这样的对象,而是提供了DataReader用来处理向前滚动的数据访问,最最重要的是加入了DataSet这样的概念,因为如此,我们能够实现很多数据库应用中需要的“Disconnected Application”,能够实现“InProc-Database”,而这一切,通过DataSet能够得到很好的解决。
2.以更加透明的方式提供了数据库连接池,同时开发人员能够通过变成的方式控制具体的运行方式。
3.提出DataAdapter,让开发人员能够以一种统一的方式去访问异种数据库,唯一的区别在于具体适配器的实现不同罢了。
4.“Typed Dataset”让开发人员能够非常方便的将DataSet 中的Table、Field映射到自定义类。
5.对于XML提供了良好的支持,所有的DataSet都能够非常容易的系列化或者反系列化成XML文档。
    当然ADO.NET不是万能的,在数据持久层(Data Presistent Layer)方面的支持显然不如Java,到现在为止都没有一个很好的O/R Mapping工具,而Java方面的Hibernate已经非常成熟,ADO.NET 2.0中的ObjectSapce也许能够改变目前的现状,就让我们耐心去等待,虽然需要到2005年。
 

ASP.NET应用程序设计的10大技巧

在本篇文章中,我们将讨论编程人员在使用ASP.NET开发应用程序时需要注意的10个技巧,这些技巧涉及从缺省的控件、表单名的改变到StringBuilder类的使用,有助于编程人员能够尽快地适应.NET环境。

  1、在使用Visual Studio .NET时,除直接或非引用的对象外,不要使用缺省的名字

  .NET带来的好处之一是所有的源代码和配置文件都是纯文本文件,能够使用Notepad或WordPad等任意的文本编辑器进行编辑。如果不愿意,我们并非一定要使用Visual Studio .NET作为集成开发环境。但使用了Visual Studio .NET,我们可以在Windows文件管理器中看到文件,或在Visual Studio .NET之外从文本编辑器中浏览文件的内容。
  使用Visual Studio .NET作为集成开发环境有许多好处,其中最显著的好处是它极大地提高了生产效率。使用Visual Studio. NET,我们能够在付出较小代价的情况下更快地开发软件。作为集成开发环境一部分的IntelliSense提供自动的代码完成、在输入方法或函数时提供动态帮助、语法错误的实时提示,以及其他能够提高生产效率的功能。

  象其他复杂的工具那样,在学会如何充分发挥它的作用和掌握其“习性”前,Visual Studio .NET也会使我们产生一种挫折感。有时,它象一个难以了解的黑盒子,会生成大量的文件和许多无用的代码。

  Visual Studio .NET的一个功能是,无论是类、控件或表单中的对象,它都能够为新对象提供缺省名字。例如,如果我们创建了一个新的ASP.NET Web Application,其缺省的名字将是WebApplication1。我们可以在“新工程”对话框中方便地改变该应用的名字,但同时改变的只是该应用程序的名字空间的名字及其所在的虚拟目录,源代码文件的缺省名字仍然是WebForm1.aspx和WebForm1.aspx.cs(C#工程)或WebForm1.aspx.vb(VB.NET工程)。

  我们可以在方案浏览器中改变ASPX和代码使用的文件名字,但Web页类的名字仍然将是WebForm1。如果在该Web表单上生成一个按钮,其缺省的名字将是Button1。事实上,所有控件的名字都是由控件的类型和数字组成的。

  我们能够,也应该将应用程序中所有的表单和控件的名字都修改成有意义的名字。对于较小的演示性程序而言,缺省的名字还能够胜任,但如果应用程序由多个表单,每个表单上有许多按钮和标签时,象frmStartup、frmDataEntry和frmReports这样的表单名就比Form1、Form2和Form3这样的名字更易于理解和维护。

  如果表单上控件要在代码的其他地方引用,使它有一个有意义的名字就更重要了。btnOK、btnCancel和btnPrint这样的名字使看代码的人更容易理解,因而,也比名字为Button1、Button2、Button3这样的控件更容易维护。

  修改一个工程中所有文件中出现的一个名字的一个好方法是,在Visual Studio .NET菜单中依次选择“编辑”->“发现和替换”->“替换”命令。

  在看二周前编写的代码时,我们经常就象第一次见到这些代码一样,因此使它们有一个有助于我们理解其含义的名字是十分有必要的。

2、即使不使用Visual Studio .NET进行编程,使用代码支持文件也有利于提高应用程序的性能

  在Web应用程序、Web服务或Web控件等所有的ASP.NET Web工程中,Visual Studio .NET都使用代码支持文件。代码支持文件使工程具有更好的组织、模块性,更适合多人组成的开发团队。另外,它还会带来性能的提高。

  代码支持文件的内容被编译成一个组合文件中的类,一般是一个DLL文件,有时也可以是EXE文件。该文件驻留在应用程序的组合体高速缓冲区中,在应用程序启动时,可以立即得到它。

  如果代码是包含在<script>标记中或ASPX文件代码中,它仍然会被编译成一个Web页类。在这种情况下,每当该网页在应用程序对话中第一次加载时,都需要重新进行编译,被编译的类就会驻留在内存中。每当计算机启动、IIS停止、重新启动或者源代码、配置文件改变时,该文件必须重新编译。尽管不大,但这样引起的性能损耗也是相当可观的。

  3、尽量减少表单回送

  每当点击Web网页上的Button、LinkButton或ImageButton控件时,表单就会被发送到服务器上。如果控件的AutoPostBack属性被设置为true,如果CheckBox、CheckBoxList等控件的状态被改变后,也会使表单会发送回服务器。

  每次当表单被发送回服务器,就会被重新加载,启动Page_Load事件,执行Page_Load事件处理程序中的所有代码。把网页的初始化代码放在这里是最合适不过的了。我们经常会希望在每次加载网页时执行一些代码,而希望只有在网页第一次加载时执行另一些代码,甚至希望一些代码在除首次加载外的每次加载时执行。

  可以利用IsPostBack特性来完成这一功能。在网页第一次加载时,该属性的值是false。如果网页因回送而被重新加载,IsPostBack属性的值就会被设置为true。通过测试,可以在任意时候执行指定的代码。下面是相关的C#代码:


protected void Page_Load(Object sender, EventArgs e)
{
// 网页每次加载时,执行的一些操作
if (!IsPostBack)
{
// 网页第一次加载时执行的操作
}
else
{
// 回送时执行的操作
}

// 网页每次加载时执行的操作
}



  我们希望尽量不引起回送(每次回送都会要求服务器进行一系列的操作),即使引起回送后。也希望能够执行尽量少的操作。大规模、浪费时间的操作(例如数据库查找)尤其应当避免,因为它们能够延长应用程序的响应时间。

  4、使用StringBuilder类

  字符串在.NET框架中是不可变的,这意味着改变字符串的操作符和方法会返回字符串的改变后的拷贝,这意味着性能还有提高的空间。当进行大量的字符串操作时,使用StringBuilder类就是一种比较好的选择了。

  下面的C#代码测试用二种方式从10000个子字符串中生成字符串所需要的时间。第一次使用了一个简单的字符串串联操作;第二次使用了StringBuilder类。要想查看结果字符串,可以去掉下面的代码中注解行的注解符号:

<%@ Page Language="C#" %>

<script runat="server">
void Page_Load(Object Source, EventArgs E)
{
int intLimit = 10000;
DateTime startTime;
DateTime endTime;
TimeSpan elapsedTime;
string strSub;
string strWhole = "";

// 首先执行字符串连接操作
startTime = DateTime.Now;
for (int i=0; i < intLimit; i++)
{
strSub = i.ToString();
strWhole = strWhole + " " + strSub;
}
endTime = DateTime.Now;
elapsedTime = endTime – startTime;
lblConcat.Text = elapsedTime.ToString();
// lblConcatString.Text = strWhole;

// 使用stringBuilder类进行同样的操作
startTime = DateTime.Now;
StringBuilder sb = new StringBuilder();
for (int i=0; i < intLimit; i++)
{
strSub = i.ToString();
sb.Append(" ");
sb.Append(strSub);
}
endTime = DateTime.Now;
elapsedTime = endTime – startTime;
lblBuild.Text = elapsedTime.ToString();
// lblBuildString.Text = sb.ToString();
}

</script>

<html>
<body>
<form runat="server">

<h1>String Concatenation Benchmark</h1>

Concatenation:
<asp:Label
id="lblConcat"
runat="server"/>

<br/>

<asp:Label
id="lblConcatString"
runat="server"/>

<br/>
<br/>

StringBuilder:
<asp:Label
id="lblBuild"
runat="server"/>

<br/>

<asp:Label
id="lblBuildString"
runat="server"/>

</form>
</body>
</html>




  二种方式的差别是相当大的:使用StringBuilder类的Append方法的速度比使用字符串连接的速度快近200倍。

5、只在必要时使用服务器端控件


  ASP.NET中新引入了一种在服务器端运行的被称作Web Server Controls的控件,在代码中,它们经常通过下面的语法被说明:

<asp:TextBox id="txtLastName" size="40" runat="server" />


  它们有时也被称作ASP控件。服务器端控件是由runat属性指示的,它的值总是“server”。
通过添加runat属性,一般的HTML控件可以被很方便地转换到服务器端运行,下面是一个简单的例子:

<input type="text" id="txtLastName" size="40" runat="server" />


  可以通过id属性中指定的名字,我们可以引用程序中的控件,可以通过编程的方式设置属性和获得值,因此,服务器端处理方式有较大的灵活性。

  这种灵活性是有一定代价的。每种服务器端控件都会消耗服务器上的资源。另外,除非控件、网页或应用程序明确地禁止view state,控件的状态是包含在view state的隐藏域中,并在每次回送中都会被传递,这会引起严重的性能下降。

  在这方面的一个很好的例子是,网页上控件表格的应用,如果不需要在代码中引用表格中的元素,则使用无需进行服务器端处理的HTML表格。我们仍然可以在HTML表格单元中放置服务器控件,并在代码中引用服务器控件。如果需要引用任意的表格元素,例如指定的单元,则整个表格必须是服务器控件。

  6. HyperLink控件、LinkButton控件的差别

  对于Web访问者而言,HyperLink、LinkButton控件是一样的,但它们在功能方面仍然有较大的差异。
当用户点击控件时,HyperLink控件会立即将用户“导航”到目标URL,表件不会回送到服务器上。 LinkButton控件则首先将表件发回到服务器,然后将用户导航到目标URL。如果在“到达”目标URL之前需要进行服务器端处理,则使用LinkButton控件;如果无需进行服务器端处理,则可以使用HyperLink控件。

  7、注释代码

  这一技巧并不是针对ASP.NET的,但它是一个良好的编程习惯。

  注释不仅仅应当说明代码会执行什么操作,还应当注明原因。例如,不要仅仅在注释中说明是在遍历数组,而是要说明遍历数组是根据某一算法计算一个值,除非算法是相当简单的,否则还应当对算法进行简要的说明。

  .NET工程中的不同的编程语言都有各自不同的注释符号,下面是一个简要的说明:


HTML <!– 注释 –>
JavaScript // 注释
VBScript ‘ 注释
VB.NET ‘ 注释
C# // 注释
/* 多行内容
的注释
*/
SQL — 注释


  在服务器控件的开始和结束标记中没有注释符号,但服务器能够忽略掉所有它不能识别的属性,因此我们能够通过使用没有定义的属性来插入注释。下面是一个例子:

<asp:TextBox id="txtLastName" size="40" comment="这是我的注释" runat="server" />


  在Visual Studio .NET中对源代码进行注释非常简单。高亮度显示需要注释的行,然后按Ctrl+K+C组合键添加注释。要删除注释,只需高亮度显示被注释的代码,并按下Ctrl+K+U组合键。

  在C#工程中,我们还可以通过在每行的开始处使用///输入XML注释小节。在注释小节中,我们可以使用下面的XML标记组织注释:


<summary></summary>
<remarks></remarks >
<param></param>
<returns></returns>
<newpara></newpara>


  要在Visual Studio .NET中查看这些XML注释的格式化的报告,我们可以首先选择“工具”菜单项,然后选择“建立注释Web网页”菜单项。

8、使用trace方法和trace属性记录Page目录中网页的执行情况

  调试程序的一种古老的技术是在程序中的关健点插入输出语句,通常情况下,输出信息中会包含重要变量的值,相关信息可以输出到屏幕、日志文件或者数据库。

  在ASP.NET中,通过使用Page命令中的trace属性,这种调试技术的使用更简单了。Page命令是ASPX文件开始处的一行代码,它提供编译器的指示。Page命令中包含一个或多个属性,向编译器提供使用的编程语言、代码支持文件的位置或要继承的类的名字等信息。

  Page命令中的属性之一是trace,其值可能是true或false,下面是一个典型的Page命令,其中的trace属性的值是true:


<%@ Page language="c#" trace="true" %>


  如果trace属性的值设置为true,由ASPX文件生成的Web页就会显示出来,除了网页本身外,关于该页的大量其他信息也会显示出来。这些信息以下面小节的形式显示在一张表格中:

  ·Request细节 提供Session ID、请求时间和请求的状态码。
  ·Trace Information 包含跟踪日志、网页生命周期中按时间先后顺序各个步骤的列表。另外,也可以向其中添加定制信息。
  ·控件树 以一种分层次的方式列出网页上的所有控件,包括每个控件以字节计算的大小。
  ·Cookies集合 列出该网页创建的所有Cookie。
  ·头部集合 HTTP头部以及它们的值。
  ·Server变量 与该网页相关的Server环境变量。

  包含在Trace Information小节中的跟踪日志是最有用的,在这里我们可以插入自己的跟踪命令。trace类中有2个方法能够在跟踪日志中插入命令:Trace.Write和Trace.Warn,除了Trace.Warn命令用红色字体显示、Trace.Write命令用黑色字体显示外,它们是相同的。下面是跟踪日志的一个屏幕快照,其中包含有几个Trace.Warn命令。

  跟踪日志中最方便的功能是我们可以在开发和测试过程中在整个代码中插入Trace.Write和Trace.Warn语句,而在最终交付应用程序时,可以通过改变Page命令中trace属性的值,禁止这些命令起作用,而无需在部署应用软件前删除这些输出语句。

  9、使用存储过程

  微软公司的SQL Server和其他现代关系数据库都使用SQL命令定义和处理查询。一个SQL语句或一系列SQL语句提交给SQL Server,SQL Server会对命令进行解析,然后创建一个查询计划并对它进行优化,然后执行该查询计划,这都需要大量的时间。

  存储过程是一系列被查询处理器预解析和优化的SQL命令,这些命令会被存储起来,可以得到快速地执行。存储过程也被称作sprocs,它可以接收输入参数,使一个单一的存储过程能够处理较大范围的特定的查询。

  因为sprocs是预先被解析的,对于复杂的查询更显得重要,其查询计划是预先优化的,因此调用查询过程比执行相同功能的SQL语句速度要快得多。

  10、使用.NET命令行

  .NET命令行工具在命令提示符窗口中运行。为了使命令能够执行,它必须驻留在命令提示符的当前目录中,或通过设置PATH环境变量。

  .NET SDK在“启动”菜单上安装一个菜单项,该菜单项能够打开一个正确设置了PATH环境变量的命令提示符窗口。我们可以通过依次点击“开始”->“程序”->“Microsoft Visual Studio .NET”->“Visual Studio .NET工具”->“Visual Studio .NET命令提示符”,启动命令提示符窗口。

  通过在将该菜单项从菜单上拖到桌面上时,同时按Ctrl+C键,就可以将该菜单项的快捷方式拷贝到桌面上,使用起来会非常方便。
Q:您在什么情况下会用到虚方法?它与接口有什么不同?
Q:Override与重载有什么区别?
Q:值类型与引用类型有什么区别?
Q:怎样理解静态变量?
Q:向服务器发送请求有几种方式?
Q:DataReader与Dataset有什么区别?
Q:如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
Q:用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
Q:软件开发过程一般有几个阶段?每个阶段的作用?
Q:微软推出了一系列的Application Block,请举出您所知道的Application Block并说明其作用?
Q:请列举一些您用到过的设计模式以及在什么情况下使用该模式?
Q:您对WebService的体会?
Q:您对编程的兴趣如何?工作中遇到不懂的问题是怎样去解决的?您一般怎样去提高自己的编程水平?

InstallShield 8.0使用简介

InstallShield 8.0的设计思路就是让你能在一种只需点击鼠标的轻松环境中开发安装程序。简单用户可以不编程,利用向导自动生成安装脚本。对于高级用户来说,只需手工修改生成的安装脚本,以实现自己的复杂要求。

一般来说,用InstallShield 8.0打包共有四个步骤:

一、利用向导生成安装脚本

1..用户首先建立一个Project Wizard工程。


2.填入用户打包软件工程的名字、版本和安装路径

 

 

 

 

 

3.添加安装资源。

  

  

4.创建快捷方式并选择图标。

 

 

5.选择安装过程中的对话框。

向导将根据以上各项的设定生成一个安装脚本,对于简单用户来说,一个安装包已经做好了。

二、脚本的修改

向导完成后将出现上图的界面,向导中所设置的选项都可以在这里进行修改。修改有

两种方式:一种是通过图形界面直观的修改,另一种是通过编写InstallShield的脚本语言InstallScript进行修改。通过脚本语言可以实现第一种方法无法实现的功能。

InstallScript在某些方面与C语言很相像,不过你可以很轻松地用它来编写或修改安装脚本,而不需要有很丰富的编程经验。

举几个简单的例子:

1.       安装路径设定为C:\cwmis

INSTALLDIR = "c:\\";

szDir = INSTALLDIR;

2.       安装对话框的设定

首先编写一个函数EFn_SetTitle()

#include "isrt.h" 

prototype EFn_SetTitle();

function EFn_SetTitle()

begin

    // 使安装窗口最大化

    Enable (FULLWINDOWMODE);

    // 将安装窗口的背景设定为红色

SetColor (BACKGROUND, BK_RED);

//将小窗口标题改为"InstallShield Setup"

    SetTitle ("InstallShield Setup", 0, BACKGROUNDCAPTION);

    // 在背景窗口中加入"SetTitle\nExample"

    SetTitle ("SetTitle\nExample", 24, YELLOW);

    // 显示背景窗口

    Enable (BACKGROUND);

    // 延迟3秒钟

    Delay (3);

end;

然后在主函数中调用:

EFn_SetTitle();

三、编译安装脚本

用户更改了脚本之后可以通过选择Build菜单上的Compile选项来进行编译,另外还可

以通过选择Build菜单上的Debug setup项对脚本加以跟踪调试。

四、测试安装脚本。脚木编译完成后,下一步就是测试它。脚本编译通过之后即得到Setup.exe文件.

    由于测试是一个循序渐进的过程,每一个安装程序在分发前都必须经过以下几项测试:

1.       通过集成开发环境直接测试安装程序。甚至在没有制作安装盘之前你就可以通过

Installshield集成开发环境来测试安装程序,方法是在Build菜单上选择Run setup选项。

2.       运行Disk1文件夹中的的Setup.exe程序,在开发平台上进行测试。Disk1文件夹位于Myinstallations\<Project name>\Media\<Media name>\Disk images目录下。

3.       在程序最终运行的操作平台上测试制作在发布媒介上的安装程序。


编写冒泡排序程序

要求:

1)请用C#编写一个冒泡排序的程序,

2)要求排序的数据从文件C:\data.txt中读取,数据间用逗号分隔。

using System;
using System.IO;

namespace SortExample
{
 class BubbleSort
 {
  private void Sort(int[] R)
  {
   int i,j,temp;
   bool exchange;
   for(i=0;i<R.Length;i++)
   {
    exchange = false;
    for(j=0;j<R.Length-i-1;j++)
    {
     if(R[j]>R[j+1])
     {
      temp = R[j];
      R[j] = R[j+1];
      R[j+1] = temp;
      exchange = true;
     }
    }
    if(!exchange)
    {
     break;
    }
   }
  }
  private static int[] getdata()
  {
   string sline;
   string[] sarray;
   string strpath= @"c:\data.txt";
   StreamReader mysr = new StreamReader(strpath);
   sline = mysr.ReadLine();
   sarray = sline.Split(new Char[]{‘,’});
   int[] mydata = new int[sarray.Length];
   for(int i=0;i<sarray.Length;i++)
   {
    mydata[i] = Convert.ToInt16(sarray[i]);
   }
   return mydata;
  }
  static void Main(string[] args)
  {
   int[] r = getdata();
   BubbleSort BS = new BubbleSort();
   BS.Sort(r);
   foreach(int it in r)
   {
    Console.WriteLine(it);
   }
  }
 }
}