CBTC子系统功能
摘要:CC:负责列车安全定位,用测速器和加速度计更新列车的安全位置,将安全位置通过DCS传输给ZC和ATS。ZC:管理当前区域所有列车的位置和方向,发出移动权限(MAL)指令给CC,CC通过MAL来执行ATP、ATO功能。CBI:控制当前设备集中站的轨旁设备,并将轨旁设备的状态传输给ZC和ATS。ATS:监督并显示CBTC列车的位置以及占用的轨道区段、轨旁设备等。
阅读全文
posted @
2012-01-31 11:48
Andy Niu
阅读(1107)
推荐(0) 编辑
闭塞
摘要:闭塞:原本意思是与外界隔绝。在信号系统中,指“一个区间(闭塞分区)内,同一时间只允许有一辆列车占用”,从而保证了列车不会相撞或者追尾。发展过程:1、时间间隔:隔一段时间发出一辆车。有可能会发生追尾,比如前面一辆车发生故障,后续的一辆车就会追尾。2、空间间隔:同一时间,保证一段区间只有一辆车占用,也就是说一辆车的前后一段距离没有列车。这就是闭塞的概念。闭塞分为:人工闭塞、自动比赛、移动闭塞。人工闭塞:一段区间的前后有A、B两个人,一辆车进入该区段,区段状态为占用,A不允许其他列车进入。当列车离开区段,B通知A区段未占用,A允许列车进入。自动闭塞:不需要人工操作,列车离开区间时,前面的信号机自动开
阅读全文
posted @
2012-01-31 11:29
Andy Niu
阅读(1932)
推荐(0) 编辑
信标
摘要:信标的作用:用于列车定位,当列车通过信标时,信标发给CC一组数字信息,CC识别该信标,并通过接收到的数字信息查询轨道数据库,确定列车的当前位置。信标分为静态信标和动态信标。静态信标:只是用来确定列车位置。动态信标:连着信号机,采集信号机的状态,用于列车定位并且通知列车是否限速。比如:如果信号机是绿灯,通知列车正常速度;如果信号机是黄灯,通知列车限速。
阅读全文
posted @
2012-01-31 10:04
Andy Niu
阅读(2470)
推荐(0) 编辑
C# Finalize 与 Dispose
摘要:1、使用场景: Finalize:Finalize 是 Object的方法,C# 类中使用了非托管资源,重写Finalize ,在方法内部释放非托管资源。从而保证了当前类被释放的同时,也释放了内部使用的非托管资源。这里的重写不能使用override,而是使用析构函数来达到同样效果。 Dispose:Dispose是 接口IDisposable的方法,实现Dispose方法,对象自身释放非托管资源。2、调用Finalize告诉GC回收当前对象,即使不调用Finalize,GC也会在恰当的时机回收该对象;对象必须手动调用Dispose,释放自身。为了更好地理解,有些类对Dispose 方法进行包装
阅读全文
posted @
2012-01-18 13:38
Andy Niu
阅读(425)
推荐(0) 编辑
C# 托管资源 与 非托管资源
摘要:托管资源:一般是指被CLR控制的内存资源,这些资源由CLR来管理。可以认为是.net 类库中的资源。非托管资源:不受CLR控制和管理的资源,比如文件流,数据库的连接,网络连接,系统的窗口句柄,打印机资源等,这类资源一般不存在堆上。可以认为操作系统资源的一组API。对于托管资源,GC负责垃圾回收。对于非托管资源,GC可以跟踪非托管资源的生存期,但是不知道如何释放它,这时候就要人工进行释放。
阅读全文
posted @
2012-01-18 11:27
Andy Niu
阅读(2314)
推荐(1) 编辑
栈 与 堆
摘要:1、使用场景:栈记录代码执行的路径;堆保存引用类型的实例。2、栈自行维护,一个步骤执行完,自动从栈顶弹出;堆需要GC来进行垃圾回收。3、数据可以分为四类:值类型、引用类型、引用、指令。其中,引用是指类型为引用类型的变量,指令是指一个一个的操作。4、内存分配:引用类型总是分配在堆上;值类型和引用总是分配在它们被声明的地方;指令总是分配在栈上。5、值类型在赋值或者参数传递时,总是“整体拷贝”;引用类型在赋值或者参数传递时,总是“复制引用”。如果要想让值类型具备“复制引用”的特点,需要使用ref 关键词。如果要让引用类型具备“整体拷贝”的特点,需要让引用类型 ICloneable接口,实现接口中的方
阅读全文
posted @
2012-01-18 10:19
Andy Niu
阅读(189)
推荐(0) 编辑
C# 值类型 与 引用类型
摘要:1、C# 是纯OO语言,Object 是所有类型的根。2、Object 建立了一个分支ValueType,ValueType继承Object,本身是class,是引用类型。3、ValueType 是所有值类型的根,值类型包括结构和枚举类型,结构包括BCL的结构(基础类型)和自定义的结构。4、所有的结构直接继承ValueType,并且是隐式的继承。4、枚举类型间接继承ValueType,枚举类型直接继承Enum,Enum继承ValueType,Enum是class,是引用类型。也就是说,Enum和枚举类型不是同一个概念,可以认为枚举类型是Enum的子类,隐式继承。5、引用类型包括类、接口、委托、
阅读全文
posted @
2012-01-17 17:23
Andy Niu
阅读(275)
推荐(0) 编辑
.net 应用程序执行过程
摘要:以C#为例说明,1、C# 源代码经过C# Compiler 生成托管模块(中间语言和元数据),其中元数据描述了源代码中定义的类型和成员,以及源代码引用的类型和成员。2、多个托管代码和资源文件经过AL.exe(程序集链接器),生成程序集(exe,dll文件)。3、JIT(just-in-time)将程序集中的IL生成本地机器指令,然后执行。可以认为,程序集包含了中间语言,是对中间语言和其他信息的封装。使用ildasm.exe 可以对程序集拆箱,读取其中的IL;使用ilasm.exe 可以对IL进行封装,生成程序集。Reflector.exe 可以将程序集中的IL转换为C#源码,方便用户查看。NG
阅读全文
posted @
2012-01-17 11:33
Andy Niu
阅读(533)
推荐(0) 编辑
自包含 与 自描述
摘要:个人理解,自包含:组件不依赖其他组件,能够以独立的方式供外部使用。自描述:当前组件包含了自身与其他组件交互相关的描述信息,不需要其他的配置文件或者额外信息来描述。
阅读全文
posted @
2012-01-17 10:43
Andy Niu
阅读(4678)
推荐(1) 编辑
C# 字段、属性、变量
摘要:字段的使用场景:与类或者对象关系密切,建议使用private修饰。属性的使用场景:对字段进行封装,提供get/set关键字,进行访问。变量的使用场景:与类或者对象关系不密切,常常在方法或者语句块中使用。字段和属性是相对于类而言的,而变量相对于方法或者语句块而言,可以再任何地方使用。注:在Java当中,没有字段的概念。Java采用 property+get/set方法,C#中采用 private field+public property,C#的做法更合理,因为获取对象的数据,应该是访问者的动作,而不应该是对象的动作。Java的做法不符合编程思想。
阅读全文
posted @
2012-01-16 16:51
Andy Niu
阅读(440)
推荐(0) 编辑
Lambda 表达式
摘要:先看代码:View Code 1 class Program 2 { 3 static void Main() 4 { 5 Func<int, bool> func1 = new Func<int, bool>(isPositive); 6 7 Func<int, bool> func2 = isPositive; 8 9 int b = 5;10 Func<int, bool> func3 = delegate(int a)11 ...
阅读全文
posted @
2012-01-13 10:34
Andy Niu
阅读(216)
推荐(0) 编辑
理解闭包
摘要:闭包的使用场景:想把一些行为封装起来,这些行为依赖当前上下文的数据,而你不想重建一个方法,并且传递参数。这时候可以使用闭包。在C#中,闭包主要是通过匿名方法来体现的。闭包的优点:1、直接传递上下文数据,不需要传递。2、延迟初始化器闭包的缺点:破坏了封装性,也就是说,使用了本不属于自己的东西。
阅读全文
posted @
2012-01-12 17:05
Andy Niu
阅读(208)
推荐(0) 编辑
栈的应用
摘要:数据结构中栈的典型应用有:1、表达式计算,包括两个过程:中缀表达式变为后缀表达式 和 后缀表达式的计算2、数制的转换3、前进后退功能感想:很多情况下,我们常常要增加功能,但有时候我们要减少功能。Stack 的内部实现是数组或者链表等,Stack其实是去除了数组或者链表的部分功能,只保留对栈顶的操作。同样的道理,string 是char数组,应该允许修改string,而不是重新创建新的string。但是设计者们为了函数式编程,将string 设计为不可变字符串,也就是说,去除了string 修改的功能。
阅读全文
posted @
2012-01-12 16:26
Andy Niu
阅读(384)
推荐(0) 编辑
C# string
摘要:C#中的String是引用类型和值类型的综合体,兼有二者的特点。1、String 是类,是引用类型,在堆上分配内存。为什么要把String设计为class ,因为String要处理比较多的业务逻辑,比如大小写转换,拆分字符串等。2、String 是不可变字符串。按理说,string是引用类型,在赋值或者调用方法传递参数的时候,是“复制引用”,对引用的值进行修改,应该产生副作用。但实际情况并非如此。请看下面的代码。View Code 1 class Program2 {3 static void Main()4 {5 string...
阅读全文
posted @
2012-01-11 13:32
Andy Niu
阅读(716)
推荐(0) 编辑
C# 装箱 与 拆箱
摘要:1、使用场景装箱的使用场景:想把值类型当做引用类型来使用,于是把值类型转换为引用类型。拆箱的使用场景:想把引用类型当做值类型来使用,于是把引用类型转化为值类型。再进一步,为什么想把值类型当做引用类型来使用? 比如:方法定义时接受Object 类型的参数,而你想传递int 类型,此时需要把int装箱为Object;对于一些非泛型的容器,为了保证通用,元素类型定义为Object,此时向容器内添加int,double的时候,需要装箱。为什么想把引用类型当做值类型来使用呢?对于值类型装箱后的引用类型,你想直接使用值类型的数据。2、实现原理装箱:(1)在堆上分配一块内存,该内存就是一个实例(2)将值类型
阅读全文
posted @
2012-01-11 13:06
Andy Niu
阅读(424)
推荐(0) 编辑
C# 值类型 与 引用类型
摘要:先看MSDN上对CTS 中的值类型和引用类型之间的关系的介绍:1、Object是所有类型的根,类型分为:值类型和引用类型。2、ValueType 是所有值类型的根(结构是隐式继承ValueType),值类型分为:结构和枚举。结构包括:BCL中的结构(也就是基础类型Primitive Type)和自定义的结构。3、ValueType 继承Object,ValueType本身是个class(引用类型),而ValueType的子类(结构和枚举)都是值类型,ValueType重写了Object的Equals方法,将引用的比较转化为引用内容的比较。4、所有的值类型都是sealed
阅读全文
posted @
2012-01-10 16:36
Andy Niu
阅读(210)
推荐(0) 编辑
C# ref,out
摘要:ref 的使用场景:调用方法传递参数的时候,对于值类型是“整体拷贝”,在方法的修改只在方法内有效,方法结束,从栈上弹出。在方法外不会产生副作用。ref 就是针对这种情况设计的,ref修饰的参数,强制参数按引用传递,在方法内的修改产生副作用。out 的使用场景:与ref 类似。ref 与 out的区别在于:1、ref 必须在方法调用前,进行显式的初始化。2、out 不需要再方法调用前进行初始化,但是在方法返回之前,必须完成赋值操作。方法定义和方法调用的地方,都必须显式地使用关键字ref 或者out,ref 与 out的实现原理应该是 对值类型进行了装箱。
阅读全文
posted @
2012-01-10 14:57
Andy Niu
阅读(323)
推荐(0) 编辑
C# 值类型 VS 引用类型
摘要:值类型:1、值类型在栈上分配内存2、值类型超出作用范围,从栈上弹出,自动释放内存3、值类型包括两类:结构和枚举,结构包括BCL中的结构和自定义的结构。BCL中的结构也就是基础类型(Primitive Type),包括:整形(Sbyte、Byte、Char、Short、Ushort、Int、Uint、Long、Ulong)浮点型(Float、Double)decimalbool4、值类型赋值或者通过方法传递参数是 “整体拷贝”引用类型:1、引用类型在堆上分配内存2、GC管理堆上的引用类型3、引用类型包括类、接口、委托、数组和string4、引用类型赋值或者通过方法传递参数是 “复制引用”需要注意
阅读全文
posted @
2012-01-10 14:08
Andy Niu
阅读(266)
推荐(0) 编辑
C# int 与 string的相互转型
摘要:代码:View Code 1 class Program 2 { 3 static void Main() 4 { 5 int a = 123; 6 string s1 = a.ToString(); 7 string s2 = Convert.ToString(a); 8 string s3 = ((IConvertible)a).ToString(null); 9 10 string s = "456";1...
阅读全文
posted @
2012-01-10 13:44
Andy Niu
阅读(442)
推荐(0) 编辑
C# ToString()方法
摘要:ToString的设计目的:为对象提供一个字符串,该字符串描述当前对象的信息。1、Object的ToString 返回当前对象所属类型的全名,这个意义不大,但是设计很合理,因为有些对象没法返回一个有意义的字符串说明,比如FileStream或者HashTable。2、Object 是所有类的根,所有类都直接或者间接继承Object。这些类大部分都重写了ToString方法。特别是值类型,比如int,double,值类型重写ToString,将实例的数值转换为等效的字符串。
阅读全文
posted @
2012-01-10 13:33
Andy Niu
阅读(328)
推荐(0) 编辑
C# override
摘要:override的使用场景:重写父类的内容。这里主要讲重写父类的方法,重写必须满足以下约束:1、方法名、返回类型、参数签名完全相同。2、具有相同的访问权限(在Java中,重写不能扩大访问权限,如果父类方法抛出异常,子类方法只能抛出相同或者更具体的异常,或者不抛出异常(等价于抛出相同的异常),否则里氏代换会出现问题。)override的使用场景细分为以下三类:1、重写abstract,必须重写。2、重写virtual,可以重写。重写,调用子类的方法;不重写,调用父类的方法。3、重写override,在重写的基础上再次重写。当子类方法与父类方法的方法名、返回类型、访问权限、参数签名完全相同时,默认
阅读全文
posted @
2012-01-10 11:34
Andy Niu
阅读(525)
推荐(0) 编辑
修改引用的值 与 修改引用(通过方法)
摘要:阅读代码:View Code 1 class Program 2 { 3 static void Main() 4 { 5 Person p1 = new Person { Name = "Andy" }; 6 Person p2 = p1; 7 8 ModifyReferenceValue(p1); 9 ModifyReference(p1);10 p1 = new Person { Name = "David"};11 ...
阅读全文
posted @
2012-01-09 15:30
Andy Niu
阅读(680)
推荐(0) 编辑
修改引用的值 与 修改引用
摘要:阅读代码:View Code 1 class Program 2 { 3 static void Main() 4 { 5 Person p1 = new Person { Name = "Andy" }; 6 Person p2 = p1; 7 8 p1.Name = "Bill"; 9 p1 = new Person { Name = "Carol"};10 }11 }第5行:在栈上分配一个变量p1,p1的类型为Pers...
阅读全文
posted @
2012-01-09 11:10
Andy Niu
阅读(315)
推荐(0) 编辑
C# params
摘要:params使用场景:调用方法的地方传递一组参数,参数的个数不确定。在方法的定义处,采用params 修饰数组。如下代码所示:View Code 1 class Program 2 { 3 static void Main() 4 { 5 UseParams(1,'a',"ss"); 6 Console.ReadLine(); 7 } 8 9 private static void UseParams(params object[] objects)10 ...
阅读全文
posted @
2012-01-06 14:00
Andy Niu
阅读(210)
推荐(0) 编辑
C# string 与 String
摘要:string :关键字String :类可以认为string 是String的别名,在生成的IL中,都是当做String,类似的还有 object 与Object,int 与 Int32
阅读全文
posted @
2012-01-06 11:28
Andy Niu
阅读(174)
推荐(0) 编辑
WPF的控件ToolTip
摘要:WPF的控件ToolTip使用场景:当鼠标移动到控件上时,显示该控件的相关信息或者说明性文字。当控件的IsEnabled 为false 的时候,ToolTip 不会显示。针对这个问题,设置 ToolTipService.ShowOnDisabled="True" ,这样当控件IsEnabled 为false 的时候,也能显示ToolTip注意:没有必要为所有的控件提供ToolTip,对于那些小图标,或者用户不太清楚用途的控件应该提供ToolTip。
阅读全文
posted @
2012-01-05 14:05
Andy Niu
阅读(918)
推荐(2) 编辑
定位问题
摘要:程序中往往涉及定位问题,定位有两种办法:1、起点+大小2、起点+终点二者本质上一样,C#中大多采用起点+大小的办法,比如C# String的方法 Substring(int startIndex, int length)Java中大多采用起点+终点的办法,比如Java String的方法 substring(intbeginIndex, intendIndex)其实 起点+大小 更为合适,大多数情况下,我们的使用场景是:知道起点和大小。比如,在WPF中Grid的用法。View Code 1 <Grid> 2 <Grid.RowDefinitions> ...
阅读全文
posted @
2012-01-04 17:26
Andy Niu
阅读(279)
推荐(0) 编辑