程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#跟objective-c語言特性的對比

c#跟objective-c語言特性的對比

編輯:C#入門知識

拿c#語言跟objective-c做個對比,記錄下自己認為是差不多的東西。   學過objc的人相信對category這個東西肯定不陌生,它可以讓我們在沒有源碼的基礎上對原先的類添加額外的一些方法,寫到這,是不是可以想像到跟c#中的擴展方法很像。是的,它們雖然叫法不一樣,但所能完成的功能是一樣的。 接下來說說objc中的Protocol,這是一個與類無關的概念,任何類都可以實現已經定義好的Protocol,這東西跟c#中的接口差不多,只不過objc中的Protocol有可選跟必選兩個概念,那到底是兩個什麼東西呢?可選就是說你在實現這個Protocol的時候,它的方法你可以選擇實現它也可以不去實現,而必選就意味著你一定要去實現它了。那代碼運行的時候我們怎麼知道實現類中有沒有實現這個可選的方法呢,我們可以利用objc的運行時特性,對其進行判斷,代碼如下: 1 if ([self.delegate respondsToSelector:@selector(aSelector)]) 2 { 3     [self.delegate aSelector]; 4 } 另外說說Block這個東西,其實個人感覺這就是函數式編程在objc中的實現,很像c#中的lambda,不過如果我們要block體內訪問外面的變量或者修改它,需要在此變量前加上兩個下劃線,這樣我們才可以在block體內進行修改,也算是閉包在objc中的一種實現吧。 KVO鍵值觀察,可以讓我們在類屬性發生變化的時候通知我們以做出更改,其實是“觀察者”模式的一個運用,這個有點像我們在WPF利用MVVM來實現的機制,MVVM中我們是將VM繼承自INotifyPropertyChanged,通過它來進行通知,而在objc中主要通過如下幾個方法來完成 1 - (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context; 2 - (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath; 3 - (void)willChangeValueForKey:(NSString *)key; 4 - (void)didChangeValueForKey:(NSString *)key; 5 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;

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