Microsoft Virtual Academy’de C# için En Çok Sorulan 10 Soruya Cevap

Selamlar;

Microsoft Virtual Academy’de en fazla sorulmuş soruların bir kısmına kendimce bu makalede cevaplamaya çalışacağım.

1-)Ne zaman Class ne zaman Struct kullanmalıyız ?

  • Class’lar Heap bellekte  referance değerleri ile tutulur.
  • Struct’lar ise stack bellekte function ve data değerleri tutulur.
  • Structlar genelde küçük datalar için kullanılırlar.
  • Structlar çok daha performanslıdırlar.
  • Structlar herzaman kendilerine özel dataları  tutarlar. Adresleme yapamazlar.
  • Structlar inheritance desteklemezler.

Aşağıda BaseCordinate adında bir class bir de BaseCordinateStruct adında struct olan iki yapı vardır. 2’sininde HomeX ve HomeY adında kordinat bilgileri constructerlarında atanmaktadır.

Aşağıdaki ChangeMethodları constructerlarında class ve struct bekleyen iki methoddur. Amaç class ve struct yapıların propertyleri olan HomeX ve HomeY’yi değiştirip 10 arttırmaktır.

Aşağıdaki Main() methodunda BaseCordinate ve BaseCordinateStruct nesneleri yaratılıp kordinat değerleri 10 arttırılmıştır.

Sonuç ekranı aşağıdadır: Görüldüğü gibi ilk başta class ve struct yapıların kordinat değerleri 10 dur. Daha sonra ChangeMethod’u ile her iki yapınında kordinat değerleri 10 artırılmıştır. Ama bu sırada Class için referans değeri giderken struct için ise direk data kopyalanmıştır. Son olarak baştaki class ve struct değeri yazdırıldığında class’ın referans değeri değiştiği için artık son olan 20 değerini almıştır. Ama struct yapıda method içinde data direk kopyalandığı için eski değeri kalmış ve 10 sonucu dönmüştür. İşte class ve struct yapıların en belirgin farkı budur.

result

2-) Xml bir file’ı nasıl parse ederiz ?

Bunun için XmlDocument, XmlNode gibi yapılar kullanıp Xpath ile filter işlemi yapılabilir. Ama ben bugün farklı bir şekilde Xml’i DataSet’e doldurup Linq ile filitreleyeceğim:

Örnek Kurları gösteren today.xml aşağıdaki gibidir.

xml

Aşağıda görüldüğü gibi dataset Xml’den gelen data ile doldurulup daha sonra Linq kullanılarak ‘US DOLLAR’ ve ‘EURO’ para birimlerinin fiyatları filitrelenerek çekilmiştir.

3-)String ile string arasındaki fark nedir ?

İkisi de sealed class String sınıfından türemiştir.

  • string değişken tanımlama amaçlı kullanılmalıdır.
  • String daha çok methodlar veya referanslar için kullanılmalıdır.

Aşağıdaki örnek’te çıktılar aynıdır.

result2

Ama aslında string.Concat methodu kullanılmamalıdır. Bunu yerine String.Concat() methodu kullanılmalıdır. Ayrıca değişken tanımlamada string name=”Bora” şeklinde kullanılmalıdır.                   String name2=”Bora 2″ şeklinde kullanılmamalıdır.

4-)Console Application’da rooth path nasıl alınır ?

Console Application’da Rooth Path Reflection kullanılarak aşağıdaki gibi alınmıştır.

Ekran çıktısı: Aşağıdaki gibidir.

result3

5-)Bir string içinde aranacak bir text değerin sayısını bulmanın en kısa yolu nedir?

Alttaki kodun ekran çıktısı 4dür. İlgili Text’in içinde aranacak string RegularExpression ile bulunup, adedi count özelliği ile ekrana yazdırılmıştır.

6-)Bir Dictionary nesnesindeki elemanları isme göre nasıl sıralarız ?

Aşağıda görüldüğü gibi programlama dillerini barındıran dictionary nesnesi linq kullanılarak Key’e göre sıralanmıştır. Daha sonra önce sırasız dizi daha sonra sıralı dizi foreach ile gezilerek ekrana basılmıştır.

Ekran Çıktısı:

dict

7-)Bir text’i şifreleme ve deşifreleme nasıl yapılır ?

Önce aşağıda görüldüğü gibi CreateDes ile şifreleme amaçlı kullanılacak password otomatik olarak verilen text password’e göre oluşturulur. MD5 ile TripleDES’e verilecek key oluşturularak, sonuçta şifreleme işleminde kullanılacak TripleDES sınıfı yaratılır.

EncrptString() methodunda önce şifrelenecek text, Byte[]’a çevrilir. Bu byte dizisini  tutacak memoryStream oluşturulur. CreateDES() ile key ve TripleDES oluşturulur. Daha sonra CryptoStream() ile yazı şifrelenerek MemoryStream’e yazılır. En sonunda da bu şifrelenen stream yazılabilir bir string değere dönüştürülür.

DecrptString() methodunda EncrptString() methoduna benzer adımlar izlenirken tek fark CryptoStream()’de CreateEncryptor yerine CreateDecryptor kullanılır. Böylece şifrelenen text değer eski okunabilir halini alır.

Aşağıdaki örnekte test amaçlı şifrelenecek text yazı DESEncrypt sınıfı ile şifrelenip tekrar deşifre edilerek ekrana basılmıştır.

Örnek ekran çıktısı aşağıdaki gibidir.

encrypt

8-)Bir enumun string değeri value değerinden nasıl bulunur ?

Aşağıda Sehirler adında il key’leri ve il kodları value’leri olucak şekilde bir enum tanımlanmıştır.

Aşağıda kullanıcıdan bir il kodu girilmesi istenmiştir. Daha sonra Enum.GetName() methodu ile ilgili koda ait Enum.Key’i yani şehir adı girilen value değerine göre bulunup ekrana basılmıştır.

Örnek Ekran Çıktısı:

result5

9-)Bir array dizide tekrarlayan değerleri nasıl temizleriz ?

Aşağıda örnek amaçlı hazırlanmış bir isim dizisi bulunmaktadır. Öncelikle tüm liste foreach ile gezilerek yazdırılmıştır. Daha sonra 1.Method olarak Linq kullanılmıştır. 2.Method olarakta boş bir dizi daha açılmış ve bu dizi içinde olmayan isimler eklenerek Unique bir dizi elde edilmiştir. Daha sonra bu 2 yöntem ile elde edilen diziler gezilerek ekrana yazdırılmıştır.

Örnek Ekran Çıktısı:

remove

10-)Bir method 2 değeri class kullanmamak kaydı ile nasıl geri döndürür ?

Aşağıda persons adında dictionary nesnesine örnek data amaçlı isim ve TC numaraları eklenmiştir. GetPersonDetail() string dönüş tipi olan bir  methoddur. Ayrıca TCNo adında string out parametresi almaktadır. İlgili liste içinde random bir kayıt seçildikten sonra dictionary listesindeki Key yani isim döndürülürken Value değeri yani TCNo değeri out parametresine atanır. Böylece GetPersonDetail methodu sonucu 2 değer döndürülmüş olur. Yani dönüş tipi string iken out parametresine de ilgili değer atanarak amaca ulaşılmış olunur. İlgili dönen değerler ekrana aşağıdaki gibi yazdırılır.

Ekran Çıktısı:

Untitled

Bu makalede Microsoft Virtual Academy’de ençok sorulan sorular içinden 10 tanesi seçip küçük kod örnekleri ile cevaplamaya çalıştım.

Yeni bir makalede görüşmek üzere hoşçakalın.

 

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

4 Cevaplar

  1. Romario dedi ki:

    Programcılığın özü bu tür kodları yazmaktır zaten. Her durum için istenen işlemi gerçekleştirebilmek. 10 maddelik listeyi incelerken C++, bash, Perl ve Ruby aklıma geldi. Bazı maddeler C++, bash, Perl ve Ruby ‘de çok yaygın kullanılan işlemler C#’ta nasıl yapılır açıklaması gibi. Fakat tüm onlar arasından en çok 9. madde dikkatimi çekti cunku Ruby’de o işlem oldukça düşeş şekilde yapılıyor. Emacs’i açıp Ruby ‘de aynı işlemi yaptım, karşılaştırma olması açısından ekran görüntüsü.

    http://i.hizliresim.com/ZDpk7Z.png

  2. Bora KAŞMER dedi ki:

    Selam Ömer;
    Güzelmiş. Eline sağlık..
    Blog’da ruby code’u da oldu sayende:)

  3. Hakan Soysal dedi ki:

    Güzel örnekler Bora Hocam,

    Örnek 9 benim de dikkatimi çekti. .Net ile haşır neşir olmayan insanlara .Net’in eğlenceli tarafını göstermek için “System.Linq.Enumerable.Distinct” methodunu kullanan bir örnek daha eklerseniz güzel olabilir.

    • borsoft dedi ki:

      Selamlar Hakan;
      Öncelikle teşekkürler.

      Enumerable.Distinct artık bir sonraki makaleye:)

      İyi çalışmalar.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir