亚欧洲精品在线观看,窝窝影院午夜看片,久久国产成人午夜av影院宅,午夜91,免费国产人成网站,ts在线视频,欧美激情在线一区

C語(yǔ)言

ruby語(yǔ)言跟c#的一些重要差別

時(shí)間:2025-04-27 11:29:15 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

ruby語(yǔ)言跟c#的一些重要差別

  1.ruby是動(dòng)態(tài)語(yǔ)言,c#是靜態(tài)語(yǔ)言--即對(duì)象在new出來(lái)以后,ruby還可以動(dòng)態(tài)給對(duì)象實(shí)例添加一些屬性或方法(javascript也是如此)

  2.ruby中刻意弱化了變量類(lèi)型這個(gè)概念,默認(rèn)情況下變量/方法都不需要聲明具體(返回)類(lèi)型,但其實(shí)在ruby內(nèi)部,會(huì)自動(dòng)根據(jù)變量的值分配類(lèi)型。(可以通過(guò) “puts 變量.class“查看)

  3.ruby相對(duì)c#來(lái)講,可能有些雷的地方在于:父類(lèi)中的private成員,居然是可以在子類(lèi)中使用的!

  ...其它地方,等學(xué)習(xí)深入了再寫(xiě)出來(lái)

  最后上一段測(cè)試代碼,展示了ruby中類(lèi)的基本用法:

  復(fù)制代碼 代碼如下:

  class People #跟javascript這類(lèi)動(dòng)態(tài)語(yǔ)言一樣,ruby中的類(lèi)也沒(méi)有public,private這類(lèi)訪問(wèn)控制標(biāo)識(shí)符

  def initialize(_name) #構(gòu)造函數(shù),名字是固定:initialize

  @name = _name; #約定:類(lèi)的私有變量以@開(kāi)頭

  end

  def to_string #類(lèi)似C#中的做法,這里寫(xiě)一個(gè)ToString方法的ruby版

  "My name is #{@name}" #ruby中方法最后一行的值,會(huì)被當(dāng)作函數(shù)值返回

  end

  def get_name_size

  return @name.length #這個(gè)方法中返回的是數(shù)字型(即名稱(chēng)的長(zhǎng)度)

  end

  def test #類(lèi)定義的最后部分,把這個(gè)方法標(biāo)記為私有方法了

  puts "private method(test) in People."

  end

  def show_name

  test #私有方法,可在內(nèi)部調(diào)用

  puts "name = #{@name}"

  end

  attr_accessor:name #定義一個(gè)可讀寫(xiě)的屬性,這里也體現(xiàn)了ruby的一個(gè)重要思想:約定重于規(guī)范,因?yàn)锧name在之前已經(jīng)使用過(guò),這里的屬性只需要把@去掉,ruby就會(huì)自動(dòng)智能的生成類(lèi)似c#中 set{value = @name},get{return @name}的語(yǔ)句

  private:test #標(biāo)明test方法是private屬性的

  protected:get_name_size #標(biāo)明get_name_size只能在本類(lèi)或子類(lèi)定義中使用(或者在子類(lèi)定義中賦值給子類(lèi)實(shí)例)

  end

  aPeople = People.new("jimmy");#創(chuàng)建一個(gè)People的實(shí)例

  puts aPeople.to_string #調(diào)用to_string方法

  #puts aPeople.get_name_size #將報(bào)錯(cuò),因?yàn)樵摲椒ㄊ鼙Wo(hù)

  #puts aPeople.test #將報(bào)錯(cuò),因?yàn)樵摲椒ㄊ撬接蟹椒?/p>

  aPeople.show_name

  puts aPeople.name

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

  aPeople.show_name

  #再定義一個(gè)子類(lèi)

  class Man < People

  def initialize(_name)

  super

  @sex = true

  end

  attr_reader:sex #定義只讀屬性sex

  def call_protected_method

  puts get_name_size #調(diào)用父類(lèi)的受保護(hù)方法

  end

  def call_protected_method2(man1)

  puts man1.get_name_size #注意這里:這里可以把父類(lèi)的受保護(hù)方法,動(dòng)態(tài)添加到子類(lèi)實(shí)例

  end

  def call_private_method #子類(lèi)可以調(diào)用父類(lèi)的私有方法!!! 這一點(diǎn)剛開(kāi)始很不習(xí)慣

  test

  end

  def call_private_method2(man1)

  man1.test #注意這里:語(yǔ)法檢查雖然可以通過(guò),但是運(yùn)行時(shí)會(huì)提示私有方法無(wú)法調(diào)用,這也是private與protected的區(qū)別

  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本身對(duì)變量沒(méi)有類(lèi)型概念,但是這樣卻不行,即:在調(diào)用父類(lèi)的受保護(hù)方法時(shí),其實(shí)是要類(lèi)型匹配的

  puts aMan.class #顯示aMan的類(lèi)名稱(chēng)

  運(yùn)行結(jié)果如下:

  復(fù)制代碼 代碼如下:

  >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語(yǔ)言跟c#的一些重要差別】相關(guān)文章:

淺談C#語(yǔ)言的特點(diǎn)05-06

用C#語(yǔ)言中的修飾符07-22

用C#語(yǔ)言獲取CPU利用率06-24

C# 術(shù)語(yǔ)大全07-29

c#快速排序算法04-21

c#冒泡排序算法08-15

WPS與office的差別07-20

c#實(shí)現(xiàn)sunday算法實(shí)例08-07

KMP算法的C#實(shí)現(xiàn)方法04-11