• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 23.04.2016 00:55:33C programlama 2 oyun
  • 20.04.2016 16:34:41Local Database
  • 15.04.2016 14:26:15Fatura kayıt işlemi
  • 21.03.2016 01:55:30C# problem

Popüler Sorular

  • 27.05.2012 05:49:50Asp.Net ile Date time alana veri ekleyemiiyorum ?
  • 2.04.2012 00:45:18.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 12.05.2012 08:44:49Acil Yardım
  • 27.05.2012 13:46:51veri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LINQ
  • LibreOffice
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

Bir C# Developerinin Windows Phone 8 SDK'inden Beklentileri ve Hayal Kirikliklari

Bir C# Developerinin Windows Phone 8 SDK'inden Beklentileri ve Hayal Kirikliklari

12.01.2013

Yazar: İlkay İlknur (Google+)

Kategori: Windows Phone 8

3527

Gecenlerde Windows Phone 8 SDK’i ile beraber gelen yenilikleri didiklerken bir yandan da SDK’in release notlarina gozatiyordum. Listedeki maddelere bakarken gozum bir anda programlama dili tarafindaki yenilklere takildi  ve notlar icerisinde C# 4.0 ve C# 5.0 ile beraber gelen yenilikleri kullanabilecegimizi gordum. Ben de bu release notlarini okuduktan sonra kollari sivadim ve C# 4.0 ve C# 5.0 yeniliklerini nereye kadar kullanabildigimizi, SDK’in bu ozelliklerin ne kadarini destekledigini incelemeye basladim. Bakalim SDK benim beklentilerimle ne kadar uyusmus :) Iste basliyoruz…

C# 4.0 dynamic Keywordu

C# 4.0′in temasi olan dinamik programlama cercevesinde C# tarafinda yapilan en buyuk yeniliklerden biri dynamic keywordunun dil icerisine eklenmesi. dynamic keywordu ile beraber bildigimiz gibi nesneler icerisindeki uye ve metot erisimlerinde compilerin derleme islemi sirasinda yaptigi tip kontrollerini de dogrudan derleme zamani yerine calisma zamanina tasiyarak gerceklestirebiliyoruz. Boylece cogu zaman reflection kullanarak 5-10 satirda yazacagimiz islemi dynamic keywordu sayesinde  1 satirda halledebiliyoruz.

Windows Phone tarafinda dynamic keywordu nerede etkin olarak isimize yarar diye dusundugumde aklima ilk sirada JSON islemleri geliyor. Donen bir JSON’i deserialize ederek elimizdeki nesnedeki uyelere dinamik olarak erismek aklima ilk gelen senaryo.

Not : Bu islemi aslinda donen JSON’in formatina uygun tipler hazirlayarak da gerceklestirebiliriz. Boylece derleme zamaninda elimizde ilgili nesne formatlari olur ve buna uygun olarak kodumuzu yazariz. Ancak her donen JSON formatina gore nesneler olusturmak bizim isimizi zorlastirir. Yoksa illa ki dynamic kullanacagiz diye bir sart yok :)

Ilk olarak bir console uygulamasi ile basit  bir JSON urettim. Urettigim JSON  icerisinde de  Customer tipinden bir array bulunmakta. Customer tipinin propertyleri ise asagidaki gibi.

[DataContract]
public class Customer
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }
}

Sonrasinda ise yazdigim Console uygulamasindan asagidaki gibi icerisinde dummy elemanlar bulunduran bir JSON elde ettim.

[{"Id":1,"Name":"Ilkay"},{"Id":2,"Name":"Ahmet"},{"Id":3,"Name":"Osman"}]

Test icin gerekli JSON’i elde ettikten sonra simdi sira geldi Windows Phone uygulamasina. Hemen yeni bir Windows Phone 8 uygulamasi yaratiyoruz ve projemize Nuget’ten asagidaki komutla JSON.NET kutuphanesini ekliyoruz.

Not : Nuget yerine JSON.NET projesinin codeplex sayfasina giderek ilgili dll’leri bilgisayariniza indiribilir ve indirdiginiz dll’i manuel olarak Windows Phone 8 projenize ekleyebilirsiniz.

JSON.NET Kutuphanesini Projeye Eklenmek Icin Gereken Nuget komutu : PM> Install-Package Newtonsoft.JSON

Nuget paketini de projemize ekledikten sonra sira geldi kodlama asamasina.

public void DynamicJsonTest()
{
    string json = "[{\"Id\":1,\"Name\":\"Ilkay\"},{\"Id\":2,\"Name\":\"Ahmet\"},{\"Id\":3,\"Name\":\"Osman\"}]";

    dynamic list = JArray.Parse(json);

    foreach (dynamic customer in list)
    {
        var id = customer.Id;
        var name = customer.Name;
    }
}

Gordugunuz gibi test amaciyla oldukca basit bir kod yazdim. DynamicJsonTest isimli metot icerisinde ilk olarak json isimli degiskenin icerisine daha onceden elde ettigim JSON stringini attim. Sonrasinda ise JSON.NET icerisindeki JArray tipinin icerisinde bulunan static Parse metodunu kullanip buradan donecek olan nesneyi de dynamic olarak tanimladim. Boylece bana gelecek olan nesne icerisindeki propertylere kolay bir bir sekilde dinamik olarak erisebilir olacagim. Sonrasinda ise elimde olan array icerisindeki elemanlari foreach ile donerek yine dynamic olarak tanimladigim her bir elemanin icerisinde bulunan Id ve Name propertylerini okumaya calistim.

Eger burada dynamic keywordunu kullanmasaydim zaten bu sekilde kod yazmam mumkun degildi. Ben dynamic kullanarak kodun derlenme asamasinda bu kisimlarda yapilacak olan type-check islemini compilerin calisma zamanina birakmasini sagladim.

Simdi yazdigimiz metodu, uygulama icerisindeki page acildiginda cagirilacak sekilde duzenleyelim ve uygulamayi calistiralim.

public MainPage()
{
    InitializeComponent();

    DynamicJsonTest();
}

Olmadi :( Itiraf etmem gerekirse bu hayal kirikligi Microsoft ile ilgili degil. Yani bu noktada olmamis diyerek topu direkt MS’e atamiyorum. :) Bu exceptioni almamizin temel nedeni kullandigimiz JSON.NET kutuphanesinin Windows Phone SDK 7.1 icin yazilmis olmasi. Ozetle bu senaryoyu test edebilmemiz icin JSON.NET’in tam anlamiyla Windows Phone 8 destekleyen surumunu beklememiz gerekmekte. Ancak tabi ki Windows Phone tarafinda dynamic keywordunun eklenmesi, benim aklima ilk olarak JSON senaryosunu getirmisti. Ancak simdilik bu konuda basarili bir sonuc alamadik. Gelelim ikinci senaryomuza.

ExpandoObject

Windows Phone icerisinde dynamic keywordu denince aklima ikinci olarak nedense ExpandoObject geldi. :) ExpandoObject basit olarak dynamic keywordu ile kullanildiginda icerisine dinamik olarak property eklenebilen bir tip. Windows Phone tarafinda ne ise yarar, nerelerde kullanilir sorularina cevap bulamasam da acaba eklemisler mi diye SDK icerisine bakamadan edemedim. :) Bir de baktim ki ExpandoObject orada System.Dynamic namespace’i icerisinde duruyor :) Hemen hizli bir sekilde asagidaki gibi test kodumu yazdim ve testimi gerceklestirdim.

public void ExpandoObjectTest()
{
    dynamic expando = new ExpandoObject();
    expando.Id = 1;
    expando.Name = "Ilkay";

    MessageBox.Show(String.Format("ExpandoObject Degerleri Id={0} Name={1}", expando.Id, expando.Name));
}

Yukaridaki kodu uygulama ilk acildiginda page icerisinde calistirdigimizda bakalim ne olmus ?

Bu testimizde basarili olduk. Ancak dedigim gibi ExpandoObject Windows Phone tarafinda nerede isimize yarar ben bulamadim. Hatta normalde de nerede kullanabilirim sorusuna cevap bulmus degilim :)

Ozetle C# 4.0 Ozellikleri

Yukaridaki iki madde acikcasi dynamic programlama ozelliginde aklima gelen spesifik senaryolar. Tabi ki dynamic kullanabilecegimiz pek cok senaryo Windows Phone icerisinde mevcut. Ozellikle reflection kullanmamiz gereken yerlerde artik dynamic ile ilerleyecek olmamiz bile bizim icin oldukca onemli. Simdi gecelim C# 5.0 kismina.

C# 5.0 Async

C# 5.0 diyince hepimizin aklina asenkron programlama geliyor. Bildigimiz uzere C# 5.0 ile beraber gelen async ve await keywordleri ile beraber asenkron cagrimlari cok kolay bir sekilde gerceklestirebiliyoruz ve callback implementasyonlarindan bu sayede yirtabiliyoruz :) Windows Phone tarafinda da yeni SDK ile beraber async ve await keywordlerini kullanabiliyormusuz. Tabi burada aklima gelen bu keywordleri kullanmanin otesinde SDK icerisinde bulunan tiplerin  task tabanli asenkron patternini ne kadar uyguladiklarini incelemek oldu. Bunun icin aklima gelen ilk tip WebClient tipi ve dolayisiyla da DownloadStringAsync metodu oldu. Bakalim bekledigimiz implementasyonu gorebilecek miyiz ?

Varan 1 :) Callbackler orada oylece durup duruyor :D Async & await kullanarak ben internetten bir content download edemeyeceksem ne anladim bu isten. :) Neyse moralimi bozmayayim dedim bakalim belki baska yerlerde bu ozelligi kullanabiliyorumdur. Sonra aklima gelen ikinci yer ve bana gore de en kritik nokta olan webServis baglantilari. Ozellikle Business appleri gelistirme senaryolarinda tum business logiclerini webservis tarafina yiktigimizda yazdigimiz uygulamanin web servise olan bagimliligi oldukca fazla oluyor. Web servis cagrilarini asenkron olarak yaptigimizdan dolayi da tum kod neredeyse callback coplugune donuyor. Ozellikle Windows 8 tarafinda web servis proxylerinin task-based olarak uretilmesiyle artik yaptigimiz asenkron web servis cagrilarinda async ve await’i hizli bir sekilde kullanabilmekteyiz. Bakalim Windows Phone 8 tarafinda bu durum nasilmis ?

Hemen Visual Studio uzerinden Add Service Reference’a tikladim ve oradan da sol alttaki Advanced butonuna tiklayarak karsima cikan ekrana oylesine uzun sure baktim :( Neden mi ?

Varan 2 :( Itiraf etmem gerekirse WebClient vs… neyse de web servisleri tarafinda durumun boyle olmasi bu konuda beni bayagi hayal kirikligina ugratti. Bunun uzerine son bir umut asenkron islemlerin yine sikca kullanildigi launchers and choosers kismini test etmek geldi aklima. Insanda bir umut iste :)

Sonuc ne mi oldu ?

Yine hayal kirikligi :(

Tum bu yaptigim testlerden sonra anladgim kadariyla Microsoft mevcut Windows Phone API’larina hic dokunmamis. Bunun yaninda yeni gelen API’larda ise asenkron islemler C# 5.0 ile beraber gelen async ve await keywordleri ile kullanilabilecek sekilde task-based olarak implemente edilmis.

Ozetle C# 5.0 Ozellikleri

Kagit uzerinde baktigimizda Windows Phone 8 SDK’i icerisinde C# 5.0 ile beraber gelen asenkron programlama yeniliklerini kullanabiliyoruz. Ancak bu yenilikleri kullanabilecegimiz senaryolara baktigimizda maalesef henuz ilgili destegin verilmedigini goruyoruz SDK icerisinde. Bu nedenle Windows Phone 8 SDK’i C# 5.0 yeniliklerini kullanabilme adina bence sinifta kaldi.

Blog yazilarina islerim dolayisiyla bir sure ara verdikten sonra boyle bir inceleme yazisiyla donmek istedim. Tabi biraz ic karartici oldu orasi ayri :)

2012′nin son blog postu olan bu yazim vesilesiyle hepinize iyi yillar dilerim !

Yazar Hakkında

İlkay İlknur

İlkay İlknur

www.ilkayilknur.com

2008 yılından itibaren yazılım geliştirme dünyasında yer alan İlkay İlknur şu ana kadar bankacılık uygulamaları ve müşterilere özel custom uygulamalar geliştirmiştir. Şu anda Amerika'da bulunan XOMNI firmasında Software Engineer olarak çalışmaktadır.Genel olarak blogunda C# ve XAML tabanlı platformlarla(Windows Phone,Windows 8,Silverlight) ilgili paylaşımlarda bulunmaktadır ve vakit buldukça üniversitelerde ve topluluk etkinliklerinde bu konular üzerinde oturumlar gerçekleştirmektedir. İlkay İlknur ayrıca Visual C# alanında MVP ünvanına sahiptir.

Sosyal Medya

ORANLAR

  • 3527izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Hocam Link başka sayfaya yönlendiriyor.
  • merhaba benim merak ettiğim bir konu var y...
  • Merhaba download linki çalışmıyor. Rica et...
  • Nevzat Bey selamlar, Açıkçası bizler a...
  • Parametreleri Cache İşleminden Yalıtma kon...

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 120003
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 65050
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 48254
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ