C语言

ruby语言跟c#的一些重要差别

时间:2024-06-16 08:26:47 C语言 我要投稿
  • 相关推荐

ruby语言跟c#的一些重要差别

  1.ruby是动态语言,c#是静态语言--即对象在new出来以后,ruby还可以动态给对象实例添加一些属性或方法(javascript也是如此)

  2.ruby中刻意弱化了变量类型这个概念,默认情况下变量/方法都不需要声明具体(返回)类型,但其实在ruby内部,会自动根据变量的值分配类型。(可以通过 “puts 变量.class“查看)

  3.ruby相对c#来讲,可能有些雷的地方在于:父类中的private成员,居然是可以在子类中使用的!

  ...其它地方,等学习深入了再写出来

  最后上一段测试代码,展示了ruby中类的基本用法:

  复制代码 代码如下:

  class People #跟javascript这类动态语言一样,ruby中的类也没有public,private这类访问控制标识符

  def initialize(_name) #构造函数,名字是固定:initialize

  @name = _name; #约定:类的私有变量以@开头

  end

  def to_string #类似C#中的做法,这里写一个ToString方法的ruby版

  "My name is #{@name}" #ruby中方法最后一行的值,会被当作函数值返回

  end

  def get_name_size

  return @name.length #这个方法中返回的是数字型(即名称的长度)

  end

  def test #类定义的最后部分,把这个方法标记为私有方法了

  puts "private method(test) in People."

  end

  def show_name

  test #私有方法,可在内部调用

  puts "name = #{@name}"

  end

  attr_accessor:name #定义一个可读写的属性,这里也体现了ruby的一个重要思想:约定重于规范,因为@name在之前已经使用过,这里的属性只需要把@去掉,ruby就会自动智能的生成类似c#中 set{value = @name},get{return @name}的语句

  private:test #标明test方法是private属性的

  protected:get_name_size #标明get_name_size只能在本类或子类定义中使用(或者在子类定义中赋值给子类实例)

  end

  aPeople = People.new("jimmy");#创建一个People的实例

  puts aPeople.to_string #调用to_string方法

  #puts aPeople.get_name_size #将报错,因为该方法受保护

  #puts aPeople.test #将报错,因为该方法是私有方法

  aPeople.show_name

  puts aPeople.name

  aPeople.name = "杨俊明" #修改姓名

  aPeople.show_name

  #再定义一个子类

  class Man < People

  def initialize(_name)

  super

  @sex = true

  end

  attr_reader:sex #定义只读属性sex

  def call_protected_method

  puts get_name_size #调用父类的受保护方法

  end

  def call_protected_method2(man1)

  puts man1.get_name_size #注意这里:这里可以把父类的受保护方法,动态添加到子类实例

  end

  def call_private_method #子类可以调用父类的私有方法!!! 这一点刚开始很不习惯

  test

  end

  def call_private_method2(man1)

  man1.test #注意这里:语法检查虽然可以通过,但是运行时会提示私有方法无法调用,这也是private与protected的区别

  end

  end

  puts "******************************"

  aMan = Man.new("jimmy.yang");

  aMan.show_name

  aMan.call_protected_method

  puts aMan.sex

  aMan.call_private_method

  aMan2 = Man.new("Mike")

  aMan.call_protected_method2(aMan2);

  #aMan.call_private_method2(aMan2);

  a = "abc";

  #aMan.call_protected_method2(a); #虽然ruby本身对变量没有类型概念,但是这样却不行,即:在调用父类的受保护方法时,其实是要类型匹配的

  puts aMan.class #显示aMan的类名称

  运行结果如下:

  复制代码 代码如下:

  >ruby classDemo.rb

  My name is jimmy

  private method(test) in People.

  name = jimmy

  jimmy

  private method(test) in People.

  name = 杨俊明

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

  private method(test) in People.

  name = jimmy.yang

  10

  true

  private method(test) in People.

  4

  Man

  >Exit code: 0

【ruby语言跟c#的一些重要差别】相关文章:

c#检测cpu使用率09-01

C语言中的几个重要概念06-17

c#中预处理指令#if的使用08-18

C语言中的重要概念有哪些08-24

普通话朗诵《差别》10-08

嵌入式Linux操作系统中的一些重要概念10-12

C#实现协同过滤算法的实例代码06-19

C#抽象工厂模式的几种实现方法及比较10-20

C#数据结构之循环链表的实例代码10-22

自考常识:自考与成考的差别10-06