Aracılığıyla paylaş


Geliştiriciler için Objective-C C# Primer

Xamarin.iOS, C# dilinde yazılmış platformdan bağımsız kodun platformlar arasında paylaşılmasını sağlar. Ancak, mevcut iOS uygulamaları önceden oluşturulmuş koddan yararlanmak Objective-C isteyebilir. Bu makale, Xamarin'e ve C# diline geçmek isteyen geliştiriciler için Objective-C kısa bir astar görevi görür.

sürümünde Objective-C geliştirilen iOS ve macOS uygulamaları, platforma özgü kodun gerekli olmadığı yerlerde C# kullanarak Xamarin'den yararlanabilir ve bu kodun Apple dışı cihazlarda kullanılmasına olanak tanır. Daha sonra web hizmetleri, JSON ve XML ayrıştırma ve özel algoritmalar gibi şeyler platformlar arası bir şekilde kullanılabilir.

Mevcut Objective-C varlıkları korurken Xamarin'den yararlanmak için, ilki, kodu yönetilen C# dünyasına sunan Objective-C bağlamalar olarak bilinen Xamarin teknolojisinde C# ile kullanıma sunabilir. Ayrıca, istenirse kod C# ile de satır satır taşınabilir. Ancak yaklaşım ne olursa olsun, bağlama veya taşıma olsun, Xamarin.iOS ile mevcut Objective-C koddan etkili bir şekilde yararlanmak için hem hem de Objective-C C# hakkında bazı bilgiler gereklidir.

Objective-C Birlikte çalış -abilir -lik

Şu anda C# dilinde Xamarin.iOS kullanarak içinden Objective-Cçağrılabilen bir kitaplık oluşturmak için desteklenen bir mekanizma yoktur. Bunun temel nedeni, bağlamaya ek olarak Mono çalışma zamanı da gereklidir. Ancak, kullanıcı arabirimleri de dahil olmak üzere mantığınızın büyük bölümünü içinde Objective-Coluşturmaya devam edebilirsiniz. Bunu yapmak için, kodu bir kitaplığa Objective-C sarmalayın ve buna bir bağlama oluşturun. Uygulamayı önyüklemek için Xamarin.iOS gereklidir (yani giriş noktasını oluşturması Main gerekir). Bundan sonra, bağlama aracılığıyla (veya P/Invoke aracılığıyla) C# ile kullanıma sunulan içinde başka herhangi bir mantık olabilir Objective-C. Bu şekilde, platforma özgü mantığı içinde Objective-C tutabilir ve C# dilinde platformdan bağımsız parçalar geliştirebilirsiniz.

Bu makalede bazı temel benzerlikler vurgulanır ve Xamarin.iOS ile C#'ye geçiş yaparken hem mevcut koda bağlama Objective-C hem de C# koduna taşıma gibi iki dilde de birkaç farklılığı karşıtlık sağlar.

Bağlama oluşturma hakkında ayrıntılı bilgi için Bağlama'daki Objective-Cdiğer belgelere bakın.

Dil Karşılaştırması

Objective-C ve C# hem bozulmadan hem de çalışma zamanı açısından çok farklı dillerdir. Objective-C dinamik bir dildir ve bir ileti geçirme düzeni kullanırken, C# statik olarak yazılır. Söz dizimi açısından Objective-C smalltalk gibidir, ancak C# temel söz diziminin büyük bir kısmını Java'dan türese de, son yıllarda Java'nın ötesinde birçok özelliği içerecek şekilde olgunlaşmıştır.

Hem hem de Objective-C C# dilinin işlevinde benzer olan birkaç dil özelliği olduğunu belirttik. C# dilinden koda Objective-C bağlama oluştururken veya C# ile bağlantı yapılırken Objective-C bu benzerlikleri anlamak yararlı olur.

Protokoller ve Arabirimler karşılaştırması

Hem hem de Objective-C C# tek devralma dilleridir. Ancak, her iki dil de belirli bir sınıfta birden çok arabirim uygulama desteğine sahiptir. Objective-C Bu mantıksal arabirimlerde protokoller, C# dilinde ise arabirimler olarak adlandırılır. Uygulama açısından, C# arabirimi ile Objective-C protokol arasındaki temel fark, ikincisi isteğe bağlı yöntemlere sahip olabilir. Daha fazla bilgi için Olaylar, Temsilciler ve Protokoller makalesine bakın.

Kategoriler ve Uzantı yöntemleri karşılaştırması

Objective-C, kategorileri kullanarak uygulama koduna sahip olmayabileceğiniz bir sınıfa yöntemlerin eklenmesine izin verir. C# dilinde, uzantı yöntemleri olarak bilinenler aracılığıyla benzer bir kavram kullanılabilir.

Uzantı yöntemleri, C# içindeki statik yöntemlerin içindeki sınıf yöntemlerine benzer olduğu bir sınıfa statik yöntemler Objective-Ceklemenize olanak tanır. Örneğin, aşağıdaki kod sınıfına UITextView adlı ScrollToBottom bir yöntem ekler ve bu da UIKit'ten sınıfına Objective-CUITextView bağlı yönetilen bir sınıftır:

public static class UITextViewExtensions
{
    public static void ScrollToBottom (this UITextView textView)
    {
        // code to scroll textView
    }
}

Ardından kodda bir UITextView örneği oluşturulduğunda yöntemi aşağıda gösterildiği gibi otomatik tamamlama listesinde kullanılabilir:

The method available in the autocomplete

Uzantı yöntemi çağrıldığında örnek, bu örnekteki gibi bağımsız değişkene textView geçirilir.

Çerçeveler ve Bütünleştirilmiş Kodlar karşılaştırması

Objective-C çerçeve olarak bilinen özel dizinlerdeki ilgili sınıfları paketler. Ancak C# ve .NET'te derlemeler önceden derlenmiş kodun yeniden kullanılabilir bitlerini sağlamak için kullanılır. iOS dışındaki ortamlarda derlemeler, çalışma zamanında derlenen tam zamanında (JIT) ara dil kodu (IL) içerir. Ancak Apple, App Store'da yayınlanan iOS uygulamalarında JIT derlenmiş kodun yürütülmesine izin vermez. Bu nedenle Xamarin ile iOS'yi hedefleyen C# kodu önceden derlenir (AOT), uygulama paketine dahil edilen meta veri dosyalarıyla birlikte tek bir Unix yürütülebilir dosyası oluşturur.

Seçiciler ile Adlandırılmış Parametreler karşılaştırması

Objective-C yöntemleri doğası gereği seçicilere parametre adlarını doğası gereği ekler. Örneğin, gibi AddCrayon:WithColor: bir seçici, kodda kullanıldığında her parametrenin ne anlama geldiğini netleştirir. C# isteğe bağlı olarak adlandırılmış bağımsız değişkenleri de destekler.

Örneğin, C# dilinde adlandırılmış bağımsız değişkenleri kullanan benzer kodlar şöyle olabilir:

AddCrayon (crayon: myCrayon, color: UIColor.Blue);

C# dilin 4.0 sürümüne bu desteği eklemiş olsa da, pratikte çok sık kullanılmaz. Ancak, kodunuzda açık olmak istiyorsanız, bunun için destek oradadır.

Üst Bilgiler ve Ad Alanları

C'nin üst kümesi olarak, Objective-C uygulama dosyasından ayrı olan genel bildirimler için üst bilgileri kullanır. C# üst bilgi dosyalarını kullanmaz. 'nin aksine Objective-C, C# kodu ad alanları içinde yer alır. Bir ad alanında kullanılabilir kod eklemek istiyorsanız, uygulama dosyasının en üstüne bir using yönergesi eklersiniz veya türü tam ad alanıyla nitelersiniz.

Örneğin, aşağıdaki kod ad alanını UIKit içerir ve bu ad alanı içindeki her sınıfın uygulamanın kullanımına sunulmasını sağlar:

using UIKit;
namespace MyAppNamespace
{
    // implementation of classes
}

Ayrıca yukarıdaki koddaki namespace anahtar sözcüğü, uygulama dosyasının kendisi için kullanılan ad alanını ayarlar. Birden çok uygulama dosyası aynı ad alanını paylaşıyorsa, ad alanını bir using yönergesine de dahil etmeniz gerekmez.

Properties

Hem hem de Objective-C C# erişimci yöntemleriyle ilgili üst düzey bir soyutlama sağlamak için özellikler kavramına sahiptir. Derleyici yönergesinde Objective-C@property , erişimci yöntemlerini etkili bir şekilde oluşturmak için kullanılır. Buna karşılık, C# dilin kendi içindeki özellikler için destek içerir. C# özelliği, aşağıdaki örneklerde gösterildiği gibi bir yedekleme alanına erişen daha uzun bir stil kullanılarak veya daha kısa, otomatik özellik söz dizimi kullanılarak uygulanabilir:

// automatic property syntax
public string Name { get; set; }

// property implemented with a backing field
string address;
public string Address {
    get {
        // could add additional code here
        return address;
    }
    set {
        address = value;
    }
}

Statik Anahtar Sözcük

statik anahtar sözcüğü ile C# arasında Objective-C çok farklı bir anlama sahiptir. Statik işlevlerde Objective-C bir işlevin kapsamını geçerli dosyayla sınırlamak için kullanılır. Ancak C# dilinde kapsam genel, özel ve anahtar sözcükler aracılığıyla korunur.

statik anahtar sözcüğü içindeki bir değişkene uygulandığında Objective-C, değişken işlev çağrıları arasında değerini korur.

C# ayrıca statik bir anahtar sözcüğüne sahiptir. Bir yönteme uygulandığında, değiştiricinin + içinde Objective-Cyaptığı şeyi etkili bir şekilde yapar. Yani bir sınıf yöntemi oluşturur. Benzer şekilde, alanlar, özellikler ve olaylar gibi diğer yapılara uygulandığında, bu türlerin herhangi bir örneği yerine içinde bildirdikleri türün bir kısmını oluşturur. Ayrıca, sınıfında tanımlanan tüm yöntemlerin de statik olması gereken statik bir sınıf oluşturabilirsiniz.

NSArray ve Liste Başlatma karşılaştırması

Objective-C artık ile NSArraykullanmak için değişmez söz dizimi içerir ve bu da başlatmayı kolaylaştırır. Ancak C# genel olarak adlandırılan daha zengin bir Listtüre sahiptir; yani listenin barındırdığı tür, listeyi oluşturan kod tarafından sağlanabilir (C++'daki şablonlar gibi). Ayrıca, aşağıda gösterildiği gibi otomatik başlatma söz dizimlerini destekler:

MyClass object1 = new MyClass ();
MyClass object2 = new MyClass ();
List<MyClass> myList = new List<MyClass>{ object1, object2 };

Bloklar ile Lambda İfadeleri Karşılaştırması

Objective-Cblokları kullanarak kapalı olduğu durumdan yararlanabilecek bir işlev satır içi oluşturabileceğiniz kapanışlar oluşturur. C# lambda ifadeleri kullanarak benzer bir kavram içerir. C# lambda ifadeleri aşağıda gösterildiği gibi işleç ile => oluşturulur:

(args) => {
    //  implementation code
};

Lambda ifadeleri hakkında daha fazla bilgi için bkz. Microsoft'un C# Programlama Kılavuzu.

Özet

Bu makalede ve C# arasında Objective-C çeşitli dil özellikleri karşıtlığı yapılmıştır. Bazı durumlarda, lambda ifadelerine yönelik bloklar ve uzantı yöntemlerine kategoriler gibi her iki dil arasında da mevcut olan benzer özelliklere işaret eder. Buna ek olarak, C# dilindeki ad alanları ve statik anahtar sözcüğün anlamı gibi dillerin birbirinden ayrıştığı yerlerle karşıttır.