程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 《C#妹妹和Objective-C阿姨對話錄》(01)認識Objective-C--初次見面的問候

《C#妹妹和Objective-C阿姨對話錄》(01)認識Objective-C--初次見面的問候

編輯:C#入門知識

小墨的童鞋

Objective-C阿姨:C#小妹妹 你好!

view sourceprint?1 #import <Foundation/Foundation.h> 

2   

3 int main (int argc, const char * argv[]) 

4 { 

5     NSLog(@"C#小妹妹 你好!"); 

6     return 0; 

7 }

C#妹妹:Objective-C 阿姨 早!

view sourceprint?01 using System; 

02   

03 namespace CSharpToObjectiveC 

04 { 

05     class Program 

06     { 

07         static void Main(string[] args) 

08         { 

09             Console.WriteLine("Objective-C 阿姨 早!"); 

10         } 

11     } 

12 }

C#妹妹:阿姨,你看我們的代碼很像啊⋯⋯
Objective-C阿姨:是啊,我們都跟C語言是親戚啊,包括C++和Java也都一樣,都怪當初C爺爺太能干了,應用太廣泛,為了方便人們學習,接下來的很多語言都在C的基礎上發展。不過我跟你在血統上區別還是很大的,我是C語言的擴展,或者說是增強,爺爺的那套東西我都具備的,原始的C語言完全不用修改,我就可以編譯運行,但是你就不行,你只是長得比較象而已。跟C++相比呢,我更簡單易學一點。
C#妹妹:這樣啊,#import <Foundation/Foundation.h> 這個語句是導入命名空間的意思麼,我弟弟VB.NET好像 就是用import導入命名空間的,不過我用using語句。
Objective-C阿姨:阿姨可沒有命名空間這個說法或者類似的功能的,這個語句是告訴編譯器可以在那個頭文件裡查詢定義,更有點像你添加引用的功能吧。
C#妹妹:那怎麼避免類名沖突啊
Objective-C阿姨:很簡單啊,你看我的NSLog()這個函數,本來應該叫Log的,但是為了說明是Cocoa提供的函數,前邊加了個NS。
C#妹妹:暈,這樣代碼看起來豈不是很亂,另外Cocoa提供的函數為啥搞了個NS的前綴?
Objective-C阿姨:這個麼,你習慣就好了。NS是歷史遺留問題啦,當初Cocoa叫NextStep,縮寫NS,後來NextStep被蘋果收購,但是編程的風格一直沒有改過。其實NextStep跟蘋果也很有淵源,85年喬布斯被蘋果辭退後,他成立新公司用我開發了NextStep,後來蘋果業績一路下滑,發現少了喬布斯還真不行,96年又把喬布斯連公司帶產品加上人一起賣了回來,你說說這事折騰的……陳年舊事了,那時你還沒有出生呢...
C#妹妹:聽起來好糾結...
Objective-C阿姨: 是啊,現在的小朋友多幸福啊,你看你,一出生就得到大家的寵愛,微軟花巨資打造和推廣,小小年紀已經發展到4.0了,可是阿姨都三十歲了,也才2.0,也沒有你應用那麼廣泛。真是干得好不如生的好,這都是命啊....要不是Apple,估計大家只能在wiki裡邊看到我曾經存在過
C#妹妹:阿姨別難過了,你現在也很厲害啊,iPhoneiPad不都是用你開發的麼...你看看地鐵上,人手一部,牛啊。我在手機領域現在幾乎是一敗塗地,現在就看蓋茨叔叔的Windows Phone了。對了阿姨,你連類也沒有麼?
Objective-C阿姨: 有啊,阿姨也是正宗的面向對象語言啊,不過跟C++一樣,沒有你和Java面向對象的那麼徹底。我還是有全局方法的,比如你看到的main和NSLog,畢竟我骨子裡邊還是C語言,加上了面向對象的特征而已。你已經把不是面向對象的內容全部清除掉了。
C#妹妹:NSLog()這個語句我能猜的出來,是不是和我Console.WriteLine()是一個功能?
Objective-C阿姨:沒錯,不僅僅是控制台程序,只要做Mac開發,包括iPhoneiPad,NSLog()都是經常使用的,可以方便的監控程序的狀態和流程。與C語言的printf()相比,NSLog()添加了時間戳和換行符,也增加了對類的支持
C#妹妹:那字符串前邊的@也是表示後便的字符串強制不轉義麼?
Objective-C阿姨:跟那個沒有關系,這裡的@表示字符串是Cocoa的NSString類型。C語言有很多原始類型,比如字符數組,但是使用起來太麻煩,所以Cocoa做了擴展,擴展出了一套類似的對象,比如NSString、NSNumber、NAArray等等,功能增強了很多。在Objective-C的開發中,也要盡量用這些對象。另外@作為一個特殊的符號,只要看見代碼中有@就意味著這裡Objective-C做了擴展。
C#妹妹:阿姨真不容易,為了完全兼容C語言做了這麼多的妥協
Objective-C阿姨:是啊,30年前C語言一統天下,面向對象編程方式又有迫切需求,所以才有了兩者結合的產物,這樣才能更容易被接受啊。人生需要夢想,生活需要妥協啊...

各位同學,本人學習Objective-C時間很短,學習Objective-C其實不是為了Mac、iPhone開發,並沒有實用,
其實是一個C#用戶學習Objective-C的學習筆記,學習的確切目的是幫助我理解C#,畢竟沒有比較是不可能知道所謂C#的特點的
請大家批判的眼光看這個東西,如果發現和其他文章、書籍、評論、資料有沖突,請盡量以其他文章為准。並給我留言
也邀請所有高手積極拍磚

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved