如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
ruby语言跟c#的一些重要差别ruby语言跟c#的一些重要差别1.ruby是动态语言,c#是静态语言--即对象在new出来以后,ruby还可以动态给对象实例添加一些属性或方法(javascript也是如此)2.ruby中刻意弱化了变量类型这个概念,默认情况下变量/方法都不需要声明具体(返回)类型,但其实在ruby内部,会自动根据变量的值分配类型。(可以通过“puts变量.class“查看)3.ruby相对c#来讲,可能有些雷的地方在于:父类中的private成员,居然是可以在子类中使用的!...其它地方,等学习深入了再写出来最后上一段测试代码,展示了ruby中类的基本用法:复制代码代码如下:classPeople#跟javascript这类动态语言一样,ruby中的类也没有public,private这类访问控制标识符definitialize(_name)#构造函数,名字是固定:initialize@name=_name;#约定:类的私有变量以@开头enddefto_string#类似C#中的做法,这里写一个ToString方法的.ruby版"Mynameis#{@name}"#ruby中方法最后一行的值,会被当作函数值返回enddefget_name_sizereturn@name.length#这个方法中返回的是数字型(即名称的长度)enddeftest#类定义的最后部分,把这个方法标记为私有方法了puts"privatemethod(test)inPeople."enddefshow_nametest#私有方法,可在内部调用puts"name=#{@name}"endattr_accessor:name#定义一个可读写的属性,这里也体现了ruby的一个重要思想:约定重于规范,因为@name在之前已经使用过,这里的属性只需要把@去掉,ruby就会自动智能的生成类似c#中set{value=@name},get{return@name}的语句private:test#标明test方法是private属性的protected:get_name_size#标明get_name_size只能在本类或子类定义中使用(或者在子类定义中赋值给子类实例)endaPeople=People.new("jimmy");#创建一个People的实例putsaPeople.to_string#调用to_string方法#putsaPeople.get_name_size#将报错,因为该方法受保护#putsaPeople.test#将报错,因为该方法是私有方法aPeople.show_nameputsaPeople.nameaPeople.name="杨俊明"#修改姓名aPeople.show_name#再定义一个子类classMandefinitialize(_name)super@sex=trueendattr_reader:sex#定义只读属性sexdefcall_protected_methodputsget_name_size#调用父类的受保护方法enddefcall_protected_method2(man1)putsman1.get_name_size#注意这里:这里可以把父类的受保护方法,动态添加到子类实例enddefcall_private_method#子类可以调用父类的私有方法!!!这一点刚开始很不习惯testenddefcall_private_method2(man1)man1.test#注意这里:语法检查虽然可以通过,但是运行时会提示私有方法无法调用,这也是private与protected的区别endendputs"******************************"aMan=Man.new("jimmy.yang");aMan.show_nameaMan.call_protected_methodputsaMan.sexaMan.call_private_methodaMan2=Man.new("Mike")aMan.call_protected_method2(aMan2);#aMan.call_private_method2(aMan2);a="abc";#aMan.call_protected_method2(a);#虽然ruby本身对变量没有类型概念,但是这样却不行,即:在调用父类的受保护方法时,其实是要类型匹配的putsaMan.class#显示aMan的类名称运行结果如下:复制代码代码如下:>rubyclassDemo.rbMynameisjimmyprivatemethod(test)inPeople.name=jimmyjimmyprivatemethod(test)inPeopl