<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            C語言

            ruby語言跟c#的一些重要差別

            時間:2025-04-27 11:29:15 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#語言的特點05-06

            用C#語言中的修飾符07-22

            用C#語言獲取CPU利用率06-24

            C# 術語大全07-29

            c#快速排序算法04-21

            c#冒泡排序算法08-15

            WPS與office的差別07-20

            c#實現sunday算法實例08-07

            KMP算法的C#實現方法04-11

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看