NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: zhouningyi1
打印 上一主题 下一主题

[网络资源] 关于rhino编程的一些基础知识

[复制链接]
21m
 楼主| 发表于 2012-8-9 02:04:32 | 只看该作者
本帖最后由 zhouningyi1 于 2012-8-9 11:15 编辑

关于List Arraylist Array三者之间的差别

ArrayList是使用大小可按需动态增加的数组实现列表。

Array类提供创建、操作、搜索和排序数组的方法,因而在公共语言运行库中用作所有数组的基类。里面的方法都是static,引用的时候Array.方法名,这些方法提供了针对数组的一些列操作(不论数组的类型是int还是string还是其他)。它不能通过new Array()的方式实例化。

所以ArrayList转换为Array后就不能改变大小了,这和数组的性质是一致的。为什么性质都是数组,还要转来转呢?原因在于ArrayList和Array数组,存的数据类型都是object,所以提供的方法也是针对object,对于特定类型的特定操作,没有涉及。转换成string[]字符串数组中,就可以用到很多有用的方法了,比如翻转,大小写转换了。

22m
 楼主| 发表于 2012-8-9 14:15:02 | 只看该作者
找了一篇关于list arraylist区别的文章
http://blog.csdn.net/gobiy/article/details/2759013

List是一个接口,而ListArray是一个类;
ListArray继承并实现了List;
所以List不能被构造,但可以向上面那样为List创建一个引用,而ListArray就可以被构造。
List list;     //正确   list=null;
List list=new List();    //   是错误的用法

List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。
而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性。
这是一个例子:
import java.util.*;

public class TestList{
public static void main(String[] args){
List list = new ArrayList();
ArrayList arrayList = new ArrayList();

list.trimToSize(); //错误,没有该方法。
arrayList.trimToSize();   //ArrayList里有该方法。
}
}

编译一下就知道结果了。

如果这个样子:
List a=new ArrayList();
则a拥有List与ArrayList的所有属性和方法,不会减少
如果List与ArrayList中有相同的属性(如int i),有相同的方法(如void f()),
则a.i是调用了List中的i
a.f()是调用了ArrayList中的f();
--------------------------------------------------------------- ---------------------------------------------------------------

问题的关键是:
为什么要用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢?
问题就在于List有多个实现类,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类,如 LinkedList或者Vector等等,这时你只要改变这一行就行了:
List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。
假设你开始用 ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。


地区用 List arr = new ArrayList();定义;行业用 ArrayListarr = new ArrayList();定义;则说明,行业里用到了ArrayList的特殊的方法.

另外的例子就是,在类的方法中,如下声明:
private void doMyAction(List list){}
这样这个方法能处理所有实现了List接口的类,一定程度上实现了泛型函数.

如果开发的时候觉得ArrayList,HashMap的性能不能满足你的需要,可以通过实现List,Map(或者Collection)来定制你的自定义
23m
 楼主| 发表于 2012-8-10 12:08:05 | 只看该作者
Rhino.common中 几何体类型 有些是结构,有些是类,找了一篇文章中关于结构和类的区别:http://blog.csdn.net/aspnet2002web/article/details/6084149
简单的说成class可以被实例化,属于引用类型struct属于值类型,
1)、类型,空间分配。结构是值类型,是分配在内存的栈上的.类时引用类型,,是分配在内存的堆上的。结构实例化可以不用new,即使用new操作也不会在堆里分配内存。作参数是按值传递,类时引用传递,变量用完自动解除内存分配,类需要垃圾回收期
2)、基类。结构继承自System.ValueType类,因此不具多态性。但是注意,System.ValueType是个引用类型。类继承自System.Object类;
3)、职能。struct常用于存储数据;而class表现为行为
4)、结构没有类的特性,不支持继承。但可以实现接口。
5)、结构无法声明无参的构造函数,但可以声明有参的构造函数
6)、结构的实例成员不能直接赋初值,必须通过构造函数来赋值,但静态成员可以直接赋初值
7)、无抽象结构,但有抽象类(abstract)
8)、class 可以声明protected成员、virtual成员、sealed成员和override成员;而struct不可以,但是值得注意的是,struct 可以重载System.Object的3个虚方法,Equals()、ToString()和GetHashTable()。

小黑屋|手机版|NCF参数化建筑论坛 ( 浙ICP备2020044100号-2 )    辽公网安备21021102000973号

GMT+8, 2024-11-30 14:33 , Processed in 0.114366 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表