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

Xamarin.iOS, C# ile yazılmış platformdan bağımsız kodun platformlar arasında paylaşılmalarına olanak sağlar. Ancak mevcut iOS uygulamaları önceden oluşturulmuş Objective-C olan koddan faydalanabilir. Bu makale, Xamarin ve C# diline taşınmak arayan geliştiriciler için kısa Objective-C bir başlangıç kitabı olarak görev vermektedir.

içinde geliştirilen iOS ve macOS uygulamaları, platforma özgü kodun gerekli olmayan yerlerde C# kullanarak Xamarin'den yararlanabilir ve bu kodun Apple olmayan cihazlarda kullanılamayacak şekilde Objective-C kullanılabilir. Daha sonra web hizmetleri, JSON ve XML ayrıştırma ve özel algoritmalar gibi şeyler platformlar arası bir şekilde kullanılabilir.

Mevcut varlıkları korurken Xamarin'den yararlanmak için, öncekiler yönetilen C# dünyasına kod ortaya çıkaran bağlamalar olarak bilinen Xamarin'den gelen bir teknolojide Objective-CObjective-C C# kullanımına açık olabilir. Ayrıca, istenirse kod C# ile de satır satır taşınabilir. Ancak yaklaşım ne olursa olsun, bağlama veya bağlamadan bağımsız olarak, Objective-C Xamarin.iOS ile mevcut koddan etkili bir şekilde yararlanan hem hem de C# hakkında Objective-C biraz bilgi sahibi olmak gerekir.

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

Şu anda C# ile Xamarin.iOS kullanarak kitaplığı oluşturmak için tarafından çağrılacak bir mekanizma Objective-C yoktur. Bunun temel nedeni, bağlamaya Mono çalışma zamanı olarak da gerekli olmasıdır. Ancak, kullanıcı arabirimleri de dahil olmak üzere mantığınızı Objective-C büyük bir bölümünü içinde oluşturabilirsiniz. Bunu yapmak için, kodu Objective-C bir kitaplıkta sarmalar ve buna bir bağlama oluşturun. Xamarin.iOS, uygulamayı önyüklemek için gereklidir (yani giriş noktasını Main oluşturması gerekir). Bundan sonra, başka herhangi bir mantık içinde olabilir ve bağlama (veya P/Invoke yoluyla) Objective-C aracılığıyla C# ile açığa çıkar. Bu şekilde, platforma özgü mantığı içinde tutabilirsiniz ve C# ile Objective-C platformdan bağımsız parçalar geliştirin.

Bu makalede bazı temel benzerlikler vurgulanmış ve mevcut koda bağlama veya bunu C# diline taşıma gibi bazı farkların yanı sıra Xamarin.iOS ile C# diline taşıma konusunda temel bilgi olarak görev yapacak iki dil arasındaki farklar da Objective-C vurgulanmıştır.

Bağlama oluşturma hakkında ayrıntılı bilgi için içinde diğer belgelere Binding Objective-C bakın.

Dil Karşılaştırması

Objective-C ve C#, hem varyans açısından hem de çalışma zamanı açısından çok farklı dillerdir. Objective-C dinamik bir dildir ve C# statik olarak yazıldı ise ileti geçirme şeması kullanır. Söz dizimi açısından, Smalltalk'a benzerken C#, son yıllarda Java'nın ötesinde birçok özellik içerecek şekilde olgunlaşmasını rağmen Java'dan temel söz dizimlerinin Objective-C çoğunu türetiyor.

Bu da hem hem de C# dilinin Objective-C işlevde benzer birkaç dil özelliği olduğunu ifade etti. C# ile Objective-C koda bağlama oluştururken veya C# ile Objective-C bağlantı oluştururken bu benzerlikleri anlamak yararlı olur.

Protokoller ve Arabirimler

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

Kategoriler ve Uzantı yöntemleri

Objective-C, kategorileri kullanılarak uygulama koduna sahip olmadığınız bir sınıfa yöntemlerin Objective-C C# ile benzer bir kavram uzantı yöntemleri olarakbilinir.

Uzantı yöntemleri, C# içinde statik yöntemlerin içinde sınıf yöntemlerine benzer olduğu bir sınıfa statik yöntemler eklemenizi Objective-C sağlar. Örneğin, aşağıdaki kod sınıfına adlı bir yöntem ekler, bu da UIKit'in sınıfına bağlı ScrollToBottomUITextView yönetilen bir Objective-CUITextView sınıftır:

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

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

Otomatik tamamlamada kullanılabilen yöntemi

Uzantı yöntemi çağrıldı mı örneği, bu örnekteki gibi bağımsız textView değişkenine geçirildi.

Çerçeveler ve Derlemeler karşılaştırması

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

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

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

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

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

C# dilin 4.0 sürümünde bu desteği eklese de, pratikte çok sık kullanılmaz. Ancak, kodunda açık olmak için destek oradadır.

Üst Bilgiler ve Ad Alanları

Bir üst küme olan C, Objective-C uygulama dosyasından ayrı genel bildirimleri için üst bilgileri kullanır. C# üst bilgi dosyalarını kullanmaz. 'den Objective-C farklı olarak, C# kodu ad alanlarında yer almaktadır. Bir ad alanına kullanılabilir kodu dahil etmek için, uygulama dosyasının en üstüne bir using yönergesi eklersiniz veya türü tam ad alanıyla nitelendirebilirsiniz.

Örneğin, aşağıdaki kod ad alanını UIKit içerir ve bu ad alanındaki her sınıfı uygulama için kullanılabilir hale gelir:

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

Ayrıca, yukarıdaki kodda yer alan 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, örtük olduğu gibi ad alanını bir using yönergesine de dahil etmek zorunda değildir.

Özellikler

Hem Objective-C hem de C# erişimci yöntemleriyle ilgili üst düzey soyutlama sağlamak için özellikler kavramına sahiptir. Aşağıdaki Objective-C @property erişimci yöntemlerini etkili bir şekilde oluşturmak için derleyici yönergesi kullanılır. Buna karşılık, C# dilin kendi içinde özellikler için destek içerir. Bir 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 uygulanabilirsiniz:

// 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;
    }
}

Static Anahtar Sözcüğü

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

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

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

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

Objective-C artık ile kullanımı için değişmez söz dizimi NSArray içerir, bu da başlatmayı kolaylaştırır. Ancak C# genel olan adlı daha zengin bir türe sahiptir. Başka bir ifadeyle listenin sahip olduğu tür, listeyi oluşturan kod (C++'daki şablonlar gibi) tarafından List sağlanmıştır. List Ayrıca, listeler 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 ve Lambda İfadeleri karşılaştırması

Objective-Cblokları Objective-C kullanarak kapanışlar oluşturabilir ve burada içine alınmış durumdan kullanabileceğiniz satır içi bir işlev oluşturabilirsiniz. C# lambda ifadeleri kullanımıyla benzer bir kavrama sahip olur. C# lambda ifadelerinde aşağıda gösterildiği gibi => işleciyle 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 çeşitli dil özellikleri Objective-C karşıtlığı vardı. Bazı durumlarda, bloklar lambda ifadelerine ve genişletme yöntemlerine kategoriler gibi her iki dil arasında var olan benzer özellikleri çağrılır. Ayrıca, C# dilindeki ad alanları ve statik anahtar sözcüğün anlamı gibi dillerin farklı olduğu yerleri de karşıtlığı vardır.