E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
步步为营
步步为营
.NET 代码重构学习笔记 八
一、Introduce Foreign Method(引入外加函数) 动机(Motivation) 在client class 中建立一个函数,并以一个server class实体作为第一引数(argument)。 示例 DateTime newStart = DateTime.Now.AddDays(1); 改为 public DateTime NextDate()
·
2015-11-13 20:39
.net
步步为营
.NET 代码重构学习笔记 九
步步为营
.NET 代码重构学习笔记系列
步步为营
.NET 代码重构学习笔记 一、为何要代码重构
步步为营
.NET 代码重构学习笔记 二、提炼方法(Extract Method)
步步为营
.
·
2015-11-13 20:39
.net
步步为营
.NET 代码重构学习笔记 七
一、Extract Class(提炼类) 动机(Motivation) 一个class应该是一个清楚的抽象(abstract),处理一些明确的责任。但在实际工作中,class会不断成长扩展。这个class会变得过份复杂,很快,class就会变成一团乱麻。 示例 public class Person { private string _name;
·
2015-11-13 20:38
.net
步步为营
.NET 代码重构学习笔记 五、分解函数和替换算法(Replace Method And Substitute Algorithm)
Replace Method with Method Object 概述 将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的值域(field),然后你可以在同一个对象中将这个大型函数分解为数个小型函数. 动机(Motivation) 小型函数优美动人,只要将相对独立的代码从大型函数中提炼出来,就可以大在提高代码的可读性. 示例 public int Gamma(
·
2015-11-13 20:37
Algorithm
步步为营
.NET 代码重构学习笔记 六、移动函数和移动值域(Move Method And Move Field)
Move Method 概述 程序中,有个函数与其所驻class之外的另一个class进行更多交流,调用后者或被后者调用 动机(Motivation) 如果一个class有太多行为,或如果一个class与另一个class有太多合作而形成高度耦合(highly coupled),我们就会搬移函数。通过这种手段,我们可以使系统中的classes更简单,这些classes最终也将更干净利落地实现
·
2015-11-13 20:37
method
步步为营
.NET 代码重构学习笔记 四、临时变量(Temporary Variable)
Split Temporary Variable(剖解临时变量) 概述 程序中有某个临时变量被赋值超过一次,它既不是循环变量,也不是一个集用临时变量(collecting temporary variable) 动机(Motivation) 临时变量有各种不同用途,其中某些用途会很自然地导至临时变量被多次赋值.(循环变量)和(集用临时变量)就是两个典型例子:循环变量(loop variab
·
2015-11-13 20:36
temporary
步步为营
.NET 代码重构学习笔记 三、内联方法(Inline Method)
一、Inline Method 概述 一个函数,其本体(method body)应该与其名称(method name)同样清楚易懂. 动机(Motivation) 以简短的函数表现动作意图,这样会使代码更清晰易读.但有时候你会遇到某些函数.其内部代码和函数名称同样清晰易读.也可能你重构了该函数,使得其内容和其名称变得同样清晰.果真如此,你就应该去掉这个函数,直接使用其中代码,间
·
2015-11-13 20:35
method
步步为营
.NET 代码重构学习笔记 二、提炼方法(Extract Method)
动机(Motivation) Extract Method是我们最常用的重构手法之一.当我们看见一个过长的函数或一段需要注释才能让人理解用途的代码,我们就会将这段代码放进一个独立函数中. 有数个原因造成我们喜欢简短而有良好命名的函数.首先,如果每个函数的粒度都很小(finely grained),那么函数之间彼此复用的机会就更大;其次,这会使高层函数代码读起来就像一系列注释;再者,如果函数都是
·
2015-11-13 20:34
method
步步为营
C# 技术漫谈 七、事务处理(Transaction)
概述 事务必须具有原子性、一致性、隔离性和持久性。虽然首字母缩写词容易记忆,但是每个词的含义不是很明显。以下是简要说明。 ● 原子性(Atomicity):原子性可确保要么执行所有更新,要么什么也不发生。由于事务中的原子性保障,开发人员不必编写代码来处理更新成功而另一个没有成功的情况。 ● 一致性
·
2015-11-13 19:52
transaction
步步为营
C# 技术漫谈 六、线程控制(Thread)
概论 多线程在构建大型系统的时候是需要重点关注的一个重要方面,特别是在效率(系统跑得多快?)和性能(系统工作正常?)之间做一个权衡的时候。恰当的使用多线程可以极大的提高系统性能。 什么是线程? 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运
·
2015-11-13 19:43
thread
步步为营
C# 技术漫谈 五、事件与委托机制
步步为营
C# 技术漫谈 五、事件与委托机制 2011-06-20 22:25 by spring yang, 555 visits, 收藏, 编辑 概述  
·
2015-11-13 19:36
C#
步步为营
C# 技术漫谈 四、垃圾回收机制(GC)
GC的前世与今生 虽然本文是以.net作为目标来讲述GC,但是GC的概念并非才诞生不久。早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是GC的第一次出现。Lisp的程序员认为内存管理太重要了,所以不能由程序员自己来管 理。但后来的日子里Lisp却没有成气候,采用内存手动管理的语言占据
·
2015-11-13 19:52
垃圾回收机制
步步为营
C# 技术漫谈 三、公共语言运行库(CLR)
概述 .NET Framework的核心是其运行库的执行环境,称为公共语言运行库(CLR)或.NET运行库.通常将在CLR的控制下运行的代码称为托管代码(managed code). 但是,在CLR执行编写好的源代码之前,需要编译它们(在C#中或其它语言中).在.NET中,编译分为两个阶段: 1、把源代码编译为Microsoft中间语言(IL)。 2、CLR把IL编译为平台专用的代码。
·
2015-11-13 19:44
C#
步步为营
C# 技术漫谈 二、ASP.NET 页生命周期
常规页生命周期阶段 一般来说,页要经历下表概述的各个阶段。除了页生命周期阶段以外,在请求前后还存在应用程序阶段,但是这些阶段并不特定于页。 阶段 说明 页请求 页请求发生在页生命周期开始之前。用户请求页时,ASP.NET 将确定是否需要分析和编译页(从而开始页的生命周期),或者是否可以在不运行页的情况下发送页的缓存版本以进行响应。 开始 在开始
·
2015-11-13 19:41
asp.net
步步为营
C# 技术漫谈 一、反射机制
反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等。 公共语言运行库(CLR)加载器管理应用程序域,这些域在拥有相同应用程序范围的对象周围形成了确定边界。这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。 System.r
·
2015-11-13 19:39
反射机制
步步为营
.NET 代码重构学习笔记系列总结
步步为营
.NET 代码重构学习笔记系列
步步为营
.NET 代码重构学习笔记 一、为何要代码重构
步步为营
.NET 代码重构学习笔记 二、提
·
2015-11-13 19:35
.net
步步为营
.NET 代码重构学习笔记 十四
一、Form Templlate Method(塑造模板函数) 动机(Motivation) 有一些subclasses,其中相应的某些函数以相同顺序执行类似的措施,但各措施实际上有所不同。将各个措施分别放进独立函数中,并保持它们都有相同的签名式(signature),于是原函数也就变得相同了。然后将原函数上移至baseclass。 示例 01 public ab
·
2015-11-13 19:34
.net
步步为营
.NET 代码重构学习笔记 十三
一、Replace Exception with Test(以测试取代异常) 动机(Motivation) 面对一个[调用者可预先加以检查]的条件,你抛出了一个异常。修改调用者,使它在调用函数之前先做检查。 示例 01 private Dictionary< int , string > _values; 02  
·
2015-11-13 19:33
.net
步步为营
.NET 代码重构学习笔记 十二
一、Preserve Whole Object(保持对象完整) 动机(Motivation) 要向某个方法内传递若干个值,可以改使用传递整个对象。 示例 1 int low = DaysTempRange().GetLow(); 2 int high = DaysTempRange().GetHigh(); 3
·
2015-11-13 19:32
.net
步步为营
.NET 代码重构学习 十一
步步为营
.NET 代码重构学习笔记系列
步步为营
.NET 代码重构学习笔记 一、为何要代码重构
步步为营
.NET 代码重构学习笔记 二、提炼方法(Extract Method)
步步为营
.
·
2015-11-13 19:29
.net
步步为营
.NET 代码重构学习笔记 十
一、Replace Type Code with Subclasses (以子类取代型别码) 动机(Motivation) 以 一个subclass取代这个type code,如果面对的type code不会影响宿主类的行为,可以使用Replace Type Code with Class 来处理它们。但如果type code 会影响宿主类的行为,那么最好的办法就是借助多态(polymorph
·
2015-11-13 19:28
.net
步步为营
.NET 代码重构学习笔记 九
示例
步步为营
.NET 设计模式学习笔记 十二、Observer (观察者模式) 二、Change Unid
·
2015-11-13 19:27
.net
步步为营
.NET 代码重构学习笔记 八
一、Introduce Foreign Method(引入外加函数) 动机(Motivation) 在client class 中建立一个函数,并以一个server class实体作为第一引数(argument)。 示例 1 DateTime newStart = DateTime.Now.AddDays(1); 改为 1 public Dat
·
2015-11-13 19:26
.net
步步为营
.NET 代码重构学习笔记 七
一、Introduce Foreign Method(引入外加函数) 动机(Motivation) 在client class 中建立一个函数,并以一个server class实体作为第一引数(argument)。 示例 view source print ? 1 DateTime newStart = DateTime.Now.AddDays(1);
·
2015-11-13 19:24
.net
ubuntu
步步为营
之uclinux编译和移植(完整版)
本节主要包含(ubuntu10.04) 一,linux下的经常使用压缩解压缩命令 二,环境建立 三,内核编译 四,移植 一,linux下的经常使用压缩解压缩命令 在linux下常见的压缩文件格式有tar gzip zip bzip2 compress等 首先对于tar格式的,压缩和解压缩方式例
·
2015-11-13 19:48
ubuntu
步步为营
.NET 代码重构学习笔记 六
一、Extract Class(提炼类) 动机(Motivation) 一个class应该是一个清楚的抽象(abstract),处理一些明确的责任。但在实际工作中,class会不断成长扩展。这个class会变得过份复杂,很快,class就会变成一团乱麻。 示例 01 public class Person 02 { 03  
·
2015-11-13 19:04
.net
步步为营
.NET 代码重构学习笔记 五、移动函数和移动值域(Move Method And Move Field)
Move Method 概述 程序中,有个函数与其所驻class之外的另一个class进行更多交流,调用后者或被后者调用 动机(Motivation) 如果一个class有太多行为,或如果一个class与另一个class有太多合作而形成高度耦合(highly coupled),我们就会搬移函数。通过这种手段,我们可以使系统中的classes更简单,这些classes最终也将更干净利落地实现
·
2015-11-13 19:59
method
步步为营
.NET 代码重构学习笔记 四、分解函数和替换算法(Replace Method And Substitute Algorithm)
Replace Method with Method Object 概述 将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的值域(field),然后你可以在同一个对象中将这个大型函数分解为数个小型函数. 动机(Motivation) 小型函数优美动人,只要将相对独立的代码从大型函数中提炼出来,就可以大在提高代码的可读性. 示例 1 public in
·
2015-11-13 19:58
Algorithm
步步为营
.NET 代码重构学习笔记 三、临时变量(Temporary Variable)
Split Temporary Variable(剖解临时变量) 概述 程序中有某个临时变量被赋值超过一次,它既不是循环变量,也不是一个集用临时变量(collecting temporary variable) 动机(Motivation) 临 时变量有各种不同用途,其中某些用途会很自然地导至临时变量被多次赋值.(循环变量)和(集用临时变量)就是两个典型例子:循环变量(loop varia
·
2015-11-13 19:53
temporary
步步为营
.NET 设计模式学习笔记 二十四、Factory Method(工厂方法模式)
概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。 意图 定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory M
·
2015-11-13 19:08
factory
步步为营
.NET 设计模式学习笔记 二十二、Memento(备望录模式)
概述 在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象本身的封装性。 意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
·
2015-11-13 19:08
.net
步步为营
.NET 设计模式学习笔记 二十一、Visitor(访问者模式)
概述 表示一个作用于某对象结构中的元素操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作,它把数据结构和作用于结构上的操作之间的耦合性解脱开,使的操作结合可以相对自由地演化。优点是增加新的操作很容易,因为增加一个新的操作就意味着增加一个新的访问者,访问者模式将有关的行为集中到一个访问对象中。 意图 实现通过统一的接口访问不同类型元素的操作,并且通过这个接口可以增加新的操作而不改
·
2015-11-13 19:07
visitor
步步为营
.NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
概述 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合。 如何使请求的发送者不需要指定具体的接受者?让请求的接受者自己在运行时决定来处理请求,从而使两者解耦。 意图 责任链模式是一种对象的行为模式【GOF95】。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递
·
2015-11-13 19:06
chain
步步为营
.NET 设计模式学习笔记 十八、Template(模板模式)
概述 变化一直以来都是软件设计的永恒话题,在XP编程中提倡拥抱变化,积极应对。如何更好的去抓住变化点,应对变化?如何更好的提高代码复用?通过学习Template Method模式,您应该有一个新的认识。 意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。[-GOF《设计模式》] 结构图
·
2015-11-13 19:05
template
步步为营
.NET 设计模式学习笔记 十七、Flyweight(享元模式)
概述 面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作? 意图 运用共享技术有效地支持大量细粒度的对象。[GOF 《设计模式》] 结构图 1.单纯享元模式的结构 在单纯享元模式中,所有的享元对象
·
2015-11-13 19:04
flyweight
步步为营
.NET 设计模式学习笔记 十六、Facade(外观模式)
概述 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade 模式。重新进行类的设计,将原来分散在源码中的类/结构及方法重新组合,形成新的、统一的接口,供上层应用使用。 Facade所面对的往往是多个类或其它程
·
2015-11-13 19:03
Facade
步步为营
.NET 设计模式学习笔记 十五、Composite(组合模式)
概述 组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 描述Composite模式的最佳方式莫过于树形图。从抽象类或接口为根节点开始,然后生枝发芽,以形成树枝节点和叶结点。因此,Composite模式通常用来描述部分与整体之间的关系,而通过根节点对该结构的抽象,
·
2015-11-13 19:03
.net
步步为营
.NET 设计模式学习笔记 十四、Decorator(装饰模式)
概述 在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能扩展变化”所导致的影响将为最低?这就是本文要讲的Decorator模式
·
2015-11-13 19:02
Decorator
步步为营
.NET 设计模式学习笔记 十二、Observer (观察者模式)
概述 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。 一个软件系统常常要求在某一个对象的状态发生变化的时候,某些其它的对象做出相应的改变。做到这
·
2015-11-13 19:01
observer
步步为营
.NET 设计模式学习笔记 十一、Iterator(迭代器模式)
概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不
·
2015-11-13 19:00
iterator
步步为营
.NET 设计模式学习笔记 十三、Bridge (桥接模式)
概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。 桥梁模式是一个非常有用的模式,也是比较复杂的一个模式。熟悉这个模式对于理解面向对象的设计原则,包括"开-闭"原则(OCP)以及组合/聚合复用原则(CA
·
2015-11-13 19:00
bridge
步步为营
.NET 设计模式学习笔记 十、Builder(建造者模式)
概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。 本文通过
·
2015-11-13 19:59
builder
步步为营
.NET 设计模式学习笔记 七、Proxy(代理模式)
概述 在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切。这就是本文要说的Proxy模式。 意图 代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。 代理模式的英文叫做Proxy或
·
2015-11-13 19:58
proxy
步步为营
.NET 设计模式学习笔记 九、Command(命令模式)
概述 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。这就是本文要说的Command模式。 意图 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求
·
2015-11-13 19:58
command
步步为营
.NET 代码重构学习笔记 三、内联方法(Inline Method)
一、Inline Method 概述 一个函数,其本体(method body)应该与其名称(method name)同样清楚易懂. 动机(Motivation) 以简短的函数表现动作意图,这样会使代码更清晰易读.但有时候你会遇到某些函数.其内部代码和函数名称同样清晰易读.也可能你重构了该函数,使得其内容和其名称变得同样清晰.果真如此,你就应该去掉这个函数,直接使用其中代码,间
·
2015-11-13 19:58
method
步步为营
.NET 代码重构学习笔记 二、提炼方法(Extract Method)
动机(Motivation) Extract Method是我们最常用的重构手法之一.当我们看见一个过长的函数或一段需要注释才能让人理解用途的代码,我们就会将这段代码放进一个独立函数中. 有数个原因造成我们喜欢简短而有良好命名的函数.首先,如果每个函数的粒度都很小(finely grained),那么函数之间彼此复用的机会就更大;其次,这会使高层函数代码读起来就像一系列注释;再者,如果函数都是
·
2015-11-13 19:56
method
步步为营
.NET 代码重构学习笔记 一、为何要代码重构
最近在学习代码重构,根据自己的学习进度写一个关于代码重构的系列出来,供自己总结提高,也希望能对他人有所帮助。园子里有 圣殿骑士的 31 天重构学习笔记 给了我很多的启发,自己也在学习《Refactoring improving the Designe of Existing Code》(重构 改善既有代码的设计),希望在代码重构思想上能有自己的心得. 一、为什么要重构(Refactoring
·
2015-11-13 19:52
.net
步步为营
.NET 设计模式学习笔记系列总结
系列导航
步步为营
.NET 设计模式学习笔记 一、开篇(设计模式之泡妞二十三招)
步步为营
.NET 设计模式学习笔记 二、Abstract Factory(抽象工厂) 步步
·
2015-11-13 19:41
.net
步步为营
.NET 设计模式学习笔记 二十四、Factory Method(工厂方法模式)
概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。 意图 定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory M
·
2015-11-13 19:40
factory
步步为营
.NET 设计模式学习笔记 二十三、Interpreter(解释器模式)
概述 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。 意图 给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。 结构图 角色说明: Abst
·
2015-11-13 19:35
.net
上一页
36
37
38
39
40
41
42
43
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他