netsınıf / .NET sınıf kitaplığına genel bakış | Microsoft Learn

Netsınıf

netsınıf

KAYANIN EŞ ANLAMLISI

Bulmacada tΓΌrkmenistan para birimi nedir, bulmacada, bulmaca sΓΆzlüğü, anlami. Net sitemizde tΓΌm resimli Γ§engel bulmaca, kare bulmaca ve diğer bulmaca sorularΔ±nΔ± bulabilir ve arama bΓΆlΓΌmΓΌnden bulmaca cevaplarΔ± ulaşabilirsiniz bulmaca çâzerken bilmediğiniz cevaplara ulaşarak bunlarΔ± âğrenebilir ve kendinizi geliştirebilirsiniz ayrΔ±ca bulmaca Ilkokul-eş anlamlΔ±-anlamdaş-ΓΆrnek sΓΆzcΓΌkler-eş anlamlarΔ± Ilkokul-eş anlamlΔ±-anlamdaş-ΓΆrnek sΓΆzcΓΌkler-eş anlamlarΔ± Ilkokul-eş anlamlΔ±-anlamdaş-ΓΆrnek sΓΆzcΓΌkler-eş anlamlarΔ± Feb 22, 2023 FakatΔ±n Eş AnlamlΔ±sΔ± Olan SΓΆzcΓΌkler 1-Ama. Γ–rnekler: 1-Sana bir şey sΓΆyleyeceğim ama kΔ±zmandan korkuyorum. 2-Δ°nsanΔ±n Γ§ok arkadaşı olabilir ama sadece bir dostu olur 2-Lakin. Apr 24, 2022 3. SΔ±nΔ±f Eş AnlamlΔ± SΓΆzcΓΌkler Bulmaca Etkinliği Δ°ndir belgesi 24 Nisan 2022, Pazar gΓΌnΓΌ ilgili kategoriye ziyaretΓ§imiz tarafΔ±ndan yΓΌklenmiştir. Benzer belge Oct 19, 2022 Ancak Ferhunde, ağır sΓΆzleriyle. Yaprak DΓΆkΓΌmΓΌ BΓΆlΓΌm Oğlunu kurtarmak iΓ§in her şeyi gΓΆze alan Ali RΔ±za Bey, bir kez daha Ferhundenin karşısΔ±na Γ§Δ±kΔ±yor. Yoğun eş anlamlΔ±sΔ± YΓΌksek sadakat seninle sΓΆzleri YΓΌksek Sadakat-Aşk DurdukΓ§a ŞarkΔ± SΓΆzΓΌ-AlternatifimCaner Cindoruk Doktor Nazmi. Technical specs Edit. Feb 23, 2023 BaşlangΔ±Γ§ Karşıt kelimesinin eş anlamΔ± nedir. Eş anlamlΔ±sΔ± onarΔ±m kelimesidir. ZΔ±t Karşıt AnlamlΔ± Kelimeler Anlamca birbirinin karşıtΔ± olan, birbiriyle Γ§elişen kelimelere zΔ±t anlamlΔ± kelimeler adΔ± verilir. SonuΓ§ olarak karşıt kelimesinin zΔ±t anlamlΔ± kelimeleri olarak zΔ±t, aykΔ±rΔ± ve aksi kelimeleri kullanΔ±labilir. Oct 19, 2022 Karşıt kelimesinin eş anlamΔ± Karşıt eş anlamlΔ±sΔ±-Anlami. NetsΔ±nΔ±f parΓ§ada anlam testi, parΓ§ada anlam 6 6. SΔ±nΔ±f âğrencileri parΓ§ada anlam ile ilgili testleri aşağıdaki linkleri kullanarak çâzebilirsiniz. SΔ±nΔ±f parΓ§ada anlam testi çâz, Sponsorlu BağlantΔ±lar, Etiketlenmiş Sayfa 6. SΔ±nΔ±f test çâz. Oct 19, 2022 Karşıt kelimesinin eş anlamΔ± Karşıt eş anlamlΔ±sΔ±-Anlami. NetsΔ±nΔ±f parΓ§ada anlam testi, parΓ§ada anlam 6 6. SΔ±nΔ±f âğrencileri parΓ§ada anlam ile ilgili testleri aşağıdaki linkleri kullanarak çâzebilirsiniz. SΔ±nΔ±f parΓ§ada anlam testi çâz, Sponsorlu BağlantΔ±lar, Etiketlenmiş Sayfa 6. SΔ±nΔ±f test çâz. kdv istisna kodlarivaillant kombi ΓΌΓ§ yollu vana fiyatΔ± Apr 12, 2020 DΓΌnya kelimesi yerine gΓΌndelik yaşam iΓ§erisinde kullanΔ±lacak pek Γ§ok farklΔ± eş anlamlΔ± sΓΆzcüğü bulunmaktadΔ±r. TDK aΓ§Δ±sΔ±ndan ise karşılΔ±k olarak cihan sΓΆzcüğü değerlendirilir. Bunun dışında ele alΔ±nacak değişik eş anlamlΔ± sΓΆzcΓΌkleri de yer almaktadΔ±r-YerkΓΌre-YeryΓΌzΓΌ-Evren-Kainat-Alem-KΓΌre-Devran, Ilkokul-eş anlamlΔ±-anlamdaş-ΓΆrnek sΓΆzcΓΌkler-eş anlamlarΔ± cΓΌmlede noktalama işaretleri dΓΌzeltme Oct 19, 2022 Karşıt kelimesinin eş anlamΔ± Karşıt Eş AnlamlΔ±sΔ± Nedir. Karşıt Kelimesinin Eş-Milliyet. Bize gΓΆre Γ§ok gΓΌzel isim koymuş olursunuz. Ketum bir karaktere sahiptir. R: Sert yapΔ±ya sahiptir. HayatΔ±n fani, kΔ±rgΔ±nlΔ±klarΔ±n saΓ§ma olduğunu savunuyorsun. GΓΌzel ve anlamlΔ± ifadeleri ΓΌzerinden Tuğberk ismi son dΓΆnemlerde kΔ±z. Feb 23, 2023 BaşlangΔ±Γ§ Karşıt kelimesinin eş anlamΔ± nedir. Eş anlamlΔ±sΔ± onarΔ±m kelimesidir. ZΔ±t Karşıt AnlamlΔ± Kelimeler Anlamca birbirinin karşıtΔ± olan, birbiriyle Γ§elişen kelimelere zΔ±t anlamlΔ± kelimeler adΔ± verilir. SonuΓ§ olarak karşıt kelimesinin zΔ±t anlamlΔ± kelimeleri olarak zΔ±t, aykΔ±rΔ± ve aksi kelimeleri kullanΔ±labilir. Oct 19, 2022 Mudanya Tirilye satΔ±lΔ±k mΓΌstakil ev mΓΌstakil tapu olup elektrik, su abonelikleri bulunmakta ve masraf yapmadan hemen oturmaya başlanabilecek durumdadΔ±r. Mudanya Eğerce SatΔ±lΔ±k Arsa kΓΆye yakΔ±n konumu ve kapanmaz deniz manzaralΔ± lokasyonu, Ayazma, Tirilye, Eşkel, Esence yatΔ±rΔ±mlΔ±k araziler iΓ§in ofisimizi ziyaret etmeniz veya gayrimenkul Oct 19, 2022 Saz eş anlamlΔ±sΔ± Batman da bugΓΌn hava durumu Batman da bugΓΌn hava durumuErgΓʼn-Erzincan. Bağlama ya da saz TΓΌrk Halk MΓΌziği nde yaygΔ±n olarak kullanΔ±lan telli bir Γ§algΔ± tΓΌrΓΌdΓΌr. Cemil Demirsipahi gibi bir ΓΌstada saz Γ§aldΔ±rΔ±p bestelettim. Feb 23, 2023 BaşlangΔ±Γ§ Karşıt kelimesinin eş anlamΔ± nedir. Eş anlamlΔ±sΔ± onarΔ±m kelimesidir. ZΔ±t Karşıt AnlamlΔ± Kelimeler Anlamca birbirinin karşıtΔ± olan, birbiriyle Γ§elişen kelimelere zΔ±t anlamlΔ± kelimeler adΔ± verilir. SonuΓ§ olarak karşıt kelimesinin zΔ±t anlamlΔ± kelimeleri olarak zΔ±t, aykΔ±rΔ± ve aksi kelimeleri kullanΔ±labilir.

Ξ— ΣχολΞ Χημικών ΞœΞ·Ο‡Ξ±Ξ½ΞΉΞΊΟŽΞ½ ΞΊΞ±ΞΉ πάλι σΡ πλΞρη λΡιτουργία

ΞŸΞ΄Ξ·Ξ³ΟŒΟ‚ Ξ³ΞΉΞ± τους πρωτοΡτΡίς φοιτητές

ΠΡριΞγηση στους Ο‡ΟŽΟΞΏΟ…Ο‚ της ΣχολΞΟ‚

ΞΞ± Προπτυχιακά ΜαθΞματα της ΣχολΞΟ‚

.NET sınıf kitaplığına genel bakış

.NET API'leri, geliştirme sürecini hızlandıran ve en iyi duruma getiren ve sistem işlevselliğine erişim sağlayan sınıflar, arabirimler, temsilciler ve değer türlerini içerir. Diller arasında birlikte çalışabilirliği kolaylaştırmak için çoğu .NET türü CLS ile uyumludur ve bu nedenle derleyicisi ortak dil belirtimine (CLS) uyan herhangi bir programlama dilinden kullanılabilir.

.NET türleri, .NET uygulamalarının, bileşenlerinin ve denetimlerinin temelidir. .NET, aşağıdaki işlevleri gerçekleştiren türler içerir:

  • Temel veri türlerini ve özel durumları temsil eder.
  • Veri yapılarını kapsülleme.
  • G/Ç gerçekleştirin.
  • Yüklenen türler hakkındaki bilgilere erişin.
  • .NET güvenlik denetimlerini çağır.
  • Veri erişimi, zengin istemci tarafı GUI ve sunucu tarafından denetlenen istemci tarafı GUI'yi sağlayın.

.NET, zengin bir arabirim kümesinin yanı sıra soyut ve somut (soyut olmayan) sınıflar sağlar. Somut sınıfları olduğu gibi kullanabilir veya çoğu durumda kendi sınıflarınızı onlardan türetebilirsiniz. Bir arabirimin işlevselliğini kullanmak için arabirimi uygulayan bir sınıf oluşturabilir veya arabirimi uygulayan .NET sınıflarından birinden bir sınıf türetebilirsiniz.

Adlandırma kuralları

.NET türleri, bir hiyerarşiyi belirten noktalı söz dizimi adlandırma düzeni kullanır. Bu teknik, daha kolay aranabilmeleri ve başvurulabilmeleri için ilgili türleri ad alanları halinde gruplandırır. Tam adın ilk bölümü (en sağdaki noktaya kadar) ad alanı adıdır. Adın son bölümü tür adıdır. Örneğin, ad alanına ait olan türü temsil eder . içindeki System.Collections.Generic türler genel koleksiyonlarla çalışmak için kullanılabilir.

Bu adlandırma düzeni, .NET'i genişleten kitaplık geliştiricilerinin hiyerarşik tür grupları oluşturmasını ve bunları tutarlı ve bilgilendirici bir şekilde adlandırmasını kolaylaştırır. Ayrıca türlerin tam adlarıyla (ad alanı ve tür adıyla) kesin bir şekilde tanımlanmasına izin verir ve bu da tür adı çakışmalarını önler. Kitaplık geliştiricilerinin ad alanları için ad oluştururken aşağıdaki kuralı kullanması beklenir:

ŞirketAdı. TechnologyName

Örneğin, ad alanı bu kılavuza uygundur.

İlgili türleri ad alanları halinde gruplandırmak için adlandırma desenlerinin kullanılması, sınıf kitaplıkları oluşturmanın ve belgelemenin kullanışlı bir yoludur. Ancak bu adlandırma düzeninin görünürlük, üye erişimi, devralma, güvenlik veya bağlama üzerinde hiçbir etkisi yoktur. Ad alanı birden çok derlemeye bölünebilir ve tek bir derleme birden çok ad alanından türler içerebilir. Derleme, ortak dil çalışma zamanında sürüm oluşturma, dağıtım, güvenlik, yükleme ve görünürlük için resmi bir yapı sağlar.

Ad alanları ve tür adları hakkında daha fazla bilgi için bkz. Ortak Tür Sistemi.

Sistem ad alanı

Ad System alanı, .NET'teki temel türlerin kök ad alanıdır. Bu ad alanı, tüm uygulamalar tarafından kullanılan temel veri türlerini temsil eden sınıflar içerir; örneğin, Object (devralma hiyerarşisinin kökü), Byte, Char, Array, Int32ve String. Bu türlerin çoğu, programlama dilinizin kullandığı temel veri türlerine karşılık gelir. .NET türlerini kullanarak kod yazarken, .NET temel veri türü beklendiğinde dilinizin ilgili anahtar sözcüğünü kullanabilirsiniz.

Aşağıdaki tabloda.NET'in sağladığı temel türler listelenir, her türü kısaca açıklar ve Visual Basic, C#, C++ ve F# içinde karşılık gelen türü gösterir.

CategorySınıf adıDescriptionVisual Basic veri türüC# veri türüC++/CLI veri türüF# veri türü
TamsayıByte8 bit işaretsiz tamsayı.
SByte8 bit imzalı tamsayı.

CLS uyumlu değil.
veya
Int1616 bit imzalı tamsayı.
Int3232 bit imzalı tamsayı. veya
Int6464 bit işaretli tamsayı.
UInt1616 bit işaretsiz tamsayı.

CLS uyumlu değil.
UInt3232 bit işaretsiz tamsayı.

CLS uyumlu değil.
veya
UInt6464 bit işaretsiz tamsayı.

CLS uyumlu değil.
Kayan noktaHalfYarım duyarlıklı (16 bit) kayan noktalı sayı.
SingleTek duyarlıklı (32 bit) kayan noktalı sayı. veya
DoubleÇift duyarlıklı (64 bit) kayan noktalı sayı. veya
MantıksalBooleanBoole değeri (true veya false).
DiğerCharUnicode (16 bit) karakteri.
DecimalOndalık (128 bit) değer.
IntPtrBoyutu temel alınan platforma bağlı olan imzalı bir tamsayı (32 bit platformda 32 bit değer ve 64 bit platformda 64 bit değer).
UIntPtrBoyutu temel alınan platforma bağlı olan imzasız bir tamsayı (32 bit platformda 32 bit değer ve 64 bit platformda 64 bit değer).

CLS uyumlu değil.
ObjectNesne hiyerarşisinin kökü.
StringSabit, sabit uzunlukta unicode karakter dizesi.

Temel veri türlerine ek olarak, System ad alanı özel durumları işleyen sınıflardan uygulama etki alanları ve atık toplayıcı gibi temel çalışma zamanı kavramlarıyla ilgilenen sınıflara kadar 100'den fazla sınıf içerir. Ad System alanı ayrıca birçok ikinci düzey ad alanı içerir.

Ad alanları hakkında daha fazla bilgi için .NET API Tarayıcısı'nı kullanarak .NET Sınıf Kitaplığı'na göz atın. API başvuru belgeleri her ad alanı, türleri ve üyelerinin her biri hakkında belgeler sağlar.

Veri yapıları

.NET, birçok .NET uygulamasının çalışması olan bir dizi veri yapısı içerir. Bunlar çoğunlukla koleksiyonlardır, ancak diğer türleri de içerir.

  • Array - Dizin tarafından erişilebilen kesin olarak belirlenmiş nesneler dizisini temsil eder. Yapısına göre sabit bir boyuta sahiptir.
  • List<T> - Dizin tarafından erişilebilen nesnelerin kesin olarak belirlenmiş bir listesini temsil eder. Gerektiğinde otomatik olarak yeniden boyutlandırılır.
  • Dictionary<TKey,TValue> - Bir anahtar tarafından dizine alınan değer koleksiyonunu temsil eder. Değerlere anahtar aracılığıyla erişilebilir. Gerektiğinde otomatik olarak yeniden boyutlandırılır.
  • Uri - Tekdüzen kaynak tanımlayıcısının (URI) nesne gösterimini ve URI'nin bölümlerine kolay erişim sağlar.
  • DateTime - Genellikle günün tarihi ve saati olarak ifade edilen bir anlık zamanı temsil eder.

Yardımcı Program API'leri

.NET, birçok önemli görev için işlevsellik sağlayan bir dizi yardımcı program API'sini içerir.

  • HttpClient - URI ile tanımlanan bir kaynaktan HTTP istekleri göndermek ve HTTP yanıtları almak için bir API.
  • XDocument - LINQ ile XML belgelerini yüklemek ve sorgulamak için bir API.
  • StreamReader - Dosyaları okumak için bir API.
  • StreamWriter - Dosya yazmaya yönelik bir API.

Uygulama modeli API'leri

.NET ile kullanılabilecek birçok uygulama modeli vardır, örneğin:

  • ASP.NET - Web siteleri ve hizmetler oluşturmaya yönelik bir web çerçevesi. Windows, Linux ve macOS'ta desteklenir (ASP.NET sürüme bağlıdır).
  • .NET MAUI - C# kullanarak Windows, macOS, iOS ve Android üzerinde çalışan yerel uygulamalar oluşturmaya yönelik bir uygulama platformu.
  • Windows Masaüstü - Windows Presentation Foundation (WPF) ve Windows Forms içerir.

Ayrıca bkz.

1 1

2 System İsim Alanı.NET sınıf kütüphanesinde yer alan System isim alanı içersinde oldukça kullanışlı bazı sınıflar bulunmaktadır. Bunlardan System.Array, System.Random, System.Convert, System.Math ve System.GC den daha önce bahsedilmişti. System isim alanı içerisinde yer alan temel veri tiplerinin sahip olduğu bazı metotlar da zaman zaman kullanılmaktadır.

3 System İsim Alanı Tip.Parse(); : string biçimindeki verileri tip türüne çevirir. Nesne.CompareTo(object o); : metodu çağrılan nesne ile o nesnesini karşılaştırır. D e ğerler eşit ise 0, nesne değeri küçük ise negatif, büyük ise pozitif değer döndürür. Nesne.Equals(object o); : metodu çağrılan nesne ile o nesnesini karşılaştırır. Eşit ise true aksi halde false döndürür. Nesne.ToString(); : nesne değerini string şeklinde geri döndürür. int a=2; int b=32; b.compareto(a) b<a ise -1, b>a ise 1, b==a ise 0 b. Equals(a) b==a ise true, b!=a ise false

4 System İsim Alanı Double ve float değerler için bir önceki anlatılan metotlara ek olarak aşağıdaki metotlar da bulunur. Bu metotlar true/false yani boolean geri dönüş değerine sahiptir: IsInfinity: Sayının sonsuzu temsil edip etmediğini kontrol eder. IsNaN: Anlamlı bir sayı olup olmadığını kontrol eder. IsPositiveInfinitiy, IsNegativeInfinity: Sayının + ya da - sonsuz olup olmadığını kontrol eder. double.isinfinity( double d); char veriler içinde bazı metotlar bulunur: char.getnumericvalue(char x) : Eğer değer sayısal karakter içeriyorsa sayısal değeri aksi halde 1 döndürür. Bunun dışında kullanılan metotlar tabloda veriliyor.

5 System İsim Alanı Diğer metotlar, Metot IsControl IsDigit IsLetter IsLetterOrDigit IsLower IsNumber IsPunctuation IsSeperator IsSurroGate IsSymbol IsUpper IsWhiteSpace Koşul Karakter kontrol karakteri ise Karakter bir rakam ise Karakter bir harf ise Karakter bir harf ya da rakam ise Karakter küçük harf ise IsControl, IsDigit, IsLetter, IsLetterOrDigit, IsLower, Karakter rakam ise IsNumber, IsPunctuation, Karakter IsSeperator, noktalama IsSurroGate, işareti ise IsSymbol, IsUpper, IsWhiteSpace Karakter boşluk gibi gibi statik ayırıcı ise metotlar da Karakter Unicode yedek karakteri ise değerin çeşitli değer kümesi Karakter içinden sembol ise olup olmadığını test eder. (rakam mı, küçük harf Karakter mi büyük sembol harf ise mü vs.) char.ispunctuation("23.",2) True char.ispunctuation('2') False Karakter tab ya da boşluk karakteri ise

6 System İsim Alanı Decimal değerler içinde bazı metotlar mevcuttur: Decimal.Add(d1, d2); //d1 ve d2'nin toplamını decimal türünden tutar. (+) Decimal.Divide(d1, d2); //d1'in d2'ye bölümünü decimal türünden tutar. (/) Decimal.Multiply(d1, d2); //d1 ile d2'nin çarpımını decimal türünden tutar. (*) Decimal.Subtract(d1, d2); //d1-d2'nin sonucunu decimal türünden tutar. (çıkarma işlemi) (-) Decimal.Remainder(d1, d2); //d1'in d2'ye bölümünden kalanı decimal türünden tutar. (mod alma işlemi) Decimal.Floor(d1); //d1'den büyük olmayan en büyük tam sayıyı decimal türünden tutar. (aşağı yuvarlama) Decimal.GetBits(d1); /*d1 için decimal sayı tanımlarken kullandığımız yapıcı işlevdeki beş parametreyi int türündeki bir dizi olarak tutar.*/ Decimal.Negate(d1); //d1'in negatifini tutar. Decimal.Round(d1, sayi); /*sayi int türünde olmalıdır. Bu metot ile d1'in ondalık kısmındaki hane sayısı sayi kadar kalır. Yani d ve sayi 3 ise tutulur. Son kaybedilen hane 5 ya da 5'ten büyükse son kalan hane 1 artılır. sayi 0 olursa d1 tam sayıya yuvarlanmış olur.*/ Decimal.Truncate(d1); //d1'in tam sayı kısmını tutar. Herhangi bir yuvarlama yapılmaz.

7 System İsim Alanı int sayi = 5; decimal d1 = 120, d2 = 45; int[] dizi2 = Decimal.GetBits(d1); Console.WriteLine(Decimal.Add(d1, d2) + "\n" + Decimal.Divide(d1, d2) + "\n" + Decimal.Multiply(d1, d2) + "\n" + Decimal.Subtract(d1, d2) + "\n" + Decimal.Remainder(d1, d2) + "\n" + Decimal.Floor(d1) + "\n" + dizi2[0] + "," + dizi2[1] + "," + dizi2[2] + "," + dizi2[3]+ "\n" + Decimal.Negate(d1) + "\n" + Decimal.Round(d1, sayi) + "\n" + Decimal.Truncate(d1));

8 C# Temel Tür Yapıları Tamsayı Tipindeki Yapılar Byte sbyte İnt16 uint16 İnt32 Uint32 İnt64 Uint64 using System; class class1 { public static void Main() { string a = "25"; int b = Int32.Parse(a); Console.WriteLine(UInt64.MaxValue); Console.WriteLine(UInt64.MinValue); Console.WriteLine(b); } } 8

9 C# Temel Tür Yapıları Char Tipinde Yapılar ToLower(char str) ToUpper(char str) str büyük harf ise küçük harfe çevirir. str küçük harf ise büyük harfe çevirir. char aaa = 'a'; Console.WriteLine(char.ToUpper(aaa) + "\n"); Çıktı: A Diğer yapılar notlarda Boolean Tipinde Yapılar Boolean veri yapısında iki tane özellik vardır. Bunlar FalseString ve TrueString dir. Bu özelliklerde String türündendir, false ve true yazılarını içerirler. CompereTo(), Equals(), Parse() ve ToString() boolean yapısında bulunan diğer metotlardır. Kendisine has bir metodu yoktur. 9

10 C# Temel Tür Yapıları DateTime ve TimeSpan C# dilinde tarih ve saat işlemleri System isim alanında bulunan DateTime ve TimeSpan yapıları ile gerçekleştirilir. DateTime yıl, ay, gün, saat, dakika, saniye gibi bilgileri tutan bir yapıdır. TimeSpan ise iki zaman bilgisi arasındaki farkı temsil etmek için kullanılır.

11 DateTime using System; class zaman { public static void Main() { DateTime tarihsaat = new DateTime(); tarihsaat = DateTime.Now; Console.WriteLine(tarihsaat); DateTime tarih = new DateTime(); tarih = DateTime.Today; Console.WriteLine(tarih); } } 11

12 DateTime

13 DateTime using System; class zaman { public static void Main() { Console.WriteLine("*****************************"); Console.WriteLine("En küçük zaman bilgisi = " + DateTime.MinValue); Console.WriteLine("*****************************"); Console.WriteLine("En büyük zaman bilgisi = " + DateTime.MaxValue); } } 13

14 DateTime ve TimeSpan TimeSpan ve DateTime yapıları ile tanımlanmış bazı operatörler bulunur. İki tarih arasındaki farkı bulmak için çıkarma ( ), ileriki bir tarihi hesaplamak için toplama (+), iki tarih arasında büyüklük küçüklük karşılaştırması yapmak için de < ve > operatörleri aşırı yüklenmiştir.

15 DateTime ve TimeSpan

16 System.BitConverter Alt seviye programlama da veriler byte dizisi şeklinde yani bitsel olarak işlenir..net içersinde de bite çevirmek amacıyla BitConverter sınıfı bulunur. Bu sınıfın IsLittleEndian isimli bir özelliği bulunur. Bu özellik işlemci mimarisine göre verileri bellekte depolarken hangi sıralamada yerleştirildiğini kontrol eder. En önemli metodu da GetBytes tır. Amacı da farklı sayı türlerini byte dizisine çevirmektir.

17 System.BitConverter Mimarinizi öğrenmek için; using System; class bitconverter { public static void Main() { if (BitConverter.IsLittleEndian) Console.WriteLine("sisteminiz düşük mimariyi destekliyor en anlamlı bit sonda"); else Console.WriteLine("sisteminiz yüksek mimariyi destekliyor en anlamlı bit başta"); } }

18 System.BitConverter int a=258; // 258/256=1 => *1 = 2 // byte[] dizi=bitconverter.getbytes(a); foreach(byte b in dizi) { Console.WriteLine(b); } byte[] dizi={2,1,0,0}; en anlamlı bit en sonda Console.WriteLine(BitConverter.ToInt32(dizi,0)); 258 (256 ya bölünmeyene kadar sayıyı bölmeye devam et)

19 System.Buffer Buffer sınıfı ile tür bilgisinden bağımsız bir biçimde byte düzeyinde veri işleme yapılır. Dizilerin belirli alanları başka bir diziye tür bilgisine bakılmaksızın aktarılabilir. Tüm veriler byte dizisi şeklinde düşünülür. BlockCopy, GetByte, SetByte en önemli metotlarıdır.

20 System.Buffer byte[] kaynak={1,2,3,1}; // , , , short[] hedef=new short[4]; // , , , Buffer.BlockCopy(kaynak,0,hedef,0,4); /*hedef dizisinin yeni hâli: , , , */ foreach(short a in hedef) Console.Write(" "+a); Bu program, mimarimiz Little Endian ise ekrana: yazar. Burada derleyici her elemanı bellekte 1 bayt yer kaplayan kaynak dizisinin elemanlarını her elemanı bellekte 2 bayt kaplayan hedef dizisine olduğu gibi kopyaladı. Derleyici burada karşılaştığı ilk baytı düşük anlamlı bayta, ikinci baytı da yüksek anlamlı bayta kopyaladı.

21 System.Buffer ByteLength() metodu Kendisine parametre olarak verilen bir dizideki toplam bayt sayısını bulur. Örneğin kendisine parametre olarak gönderilen 3 elemanlı short türünden bir dizi sonucu 6 sayısı gönderir. Geri dönüş tipi inttir. Örnek: short[] dizi=new short[4]; Console.WriteLine(Buffer.ByteLength(dizi)); // 8 yazar GetByte() metodu static byte GetByte(Array dizi,int a) dizi dizisinin a. baytını verir. SetByte() metodu static void SetByte(Array dizi,int a,byte deger) a. baytı deger olarak değiştirir.

22 System.Buffer Örnek: byte[] dizi={0,3,2,1,4}; Console.WriteLine(Buffer.GetByte(dizi,3)); Bu kod 1 değerini döndürür. Eğer dizinin tipi byte değil de short olsaydı işler değişirdi. Çünkü o zaman hem sıfırla beslenen baytlar da hesaba katılırdı ve hem de bilgisayarımızın mimarisi sonucu etkilerdi. Bu durumu örneklendirelim: short[] dizi={0,3,2,1,4}; // 0-> ,2-> > ,6-> , 8-> Console.WriteLine(Buffer.GetByte(dizi,4)); Bu kod Little Endian mimarisinde ekrana 2 yazar. Mimari Big Endian olsaydı ekrana 0 yazacaktı. Çünkü Little Endian mimarisinde verilerin önce düşük anlamlı baytı okunur/yazılır. Big Endian mimarisinde ise tam tersi söz konusudur. Console.WriteLine(Buffer.GetByte(dizi,8));// Ekrana 4 yazar Örnek: byte[] dizi={2,1,4}; Buffer.SetByte(dizi,1,5); Console.WriteLine(dizi[1]); //Ekrana 5 yazılır. Yine eğer dizinin türü byte değil de int olsaydı işler değişirdi.

23 C# Temel Tür Yapıları Convert Sınıfı using System; class ortalamahesapla { public static void Main() { Console.Write("Vize1 = "); int vize1 = Convert.ToInt32(Console.ReadLine()); Console.Write("Vize2 = "); int vize2 = Convert.ToInt32(Console.ReadLine()); Console.Write("Final = "); int final = Convert.ToInt32(Console.ReadLine()); double a = ((double)vize1 * (double)vize2 * (double)final * 0.5); Console.WriteLine("Ortalama = {0}", a); } } 23

24 String İşlemleri Programlarda kullanılan verilerin büyük bir çoğunluğu string türündendir. C# da string işlemleri System.String sınıfı içersinde yer alan üye metot ve özelliklerle yapılır. String veriler için indeksleyici de tanımlanmıştır. Yani bir karakter dizisi gibi işlem görebilir. Fakat karakterler salt okunurdur. Stringler değişik şekillerde tanımlanabilirler: string a = C# Programlama Dili ; char[] dizi = { 1, 2, 3, 4, 5 }; String s = new String(dizi);//12345 String s = new String(dizi,1,2); //dizi[1]'den itibaren 2 eleman stringe atandı. 23 String s = new String( x,10);//xxxxxxxxxx

25 String İşlemleri String sınıfının metotları oldukça fazladır. Önemli metotlarından bazıları şunlardır: string.concat() static string Concat(params Array stringler) String verilerin ardarda eklenmesini sağlar. + operatörü ile eşdeğerdir. string.compare() İki string değeri karşılaştırı. == ve!= operatörleri ile benzer işlem gerçekleştirir. Fakat Compare metodunun bazı aşırı yüklemeleri ile daha gelişmiş (büyük küçük harf duyarlılığı gibi.) karşılaştırmalar yapılabilir. static int Compare(string a,string b) static int Compare(string a,string b,bool c) static int Compare(string a,int indeks1,string b,int indeks2) static int Compare(string a,int indeks1,string b,int indeks2,bool c) kıyaslamada ilk elemanların a[indeks1] ve b[indeks2] sayılmasıdır. Yani stringlerdeki bu elemanlardan önceki elemanlar yok sayılır.

26 String İşlemleri String.Concat() using System; class Concat { public static void Main() { String str1 = String.Concat("Bilgisayar", " Öğretmenliği"); Console.WriteLine(str1); String str2 = String.Concat("Z", "5", "s", "3", "f"); Console.WriteLine(str2); String str3 = "Bilgisayar" + " Öğretmenliği"; Console.WriteLine(str3); String str4 = String.Concat(5, "A"); Console.WriteLine(str4); } } 26

27 String İşlemleri String.Compare() using System; class class1 { public static void Main() { string a="aa"; bool sa=true;//false büyük küçük duyarsız string v="aa"; int c=string.compare(a,v,sa); Console.WriteLine(c); } } 27

28 String İşlemleri stringnesne.compareto(string str) stringnesne.indexof() string içersinde alt stringlerin aranmasını sağlar. Geriye aranan alt stringin bulunduğu konumu ya da bulunamadı ( 1) bilgisini döndürür. int IndexOf(string a) int IndexOf(char b) stringnesne.lastindexof() IndexOf ile aynı çalışır Farkı ise aranan karakterin en son nerede görüldüğünün indeksini geri döndürür. int LastIndexOf(string a) int LastIndexOf(char b)

29 String İşlemleri IndexOf using System; class arama{ public static void Main() { string yazı="firat üniversitesi"; Console.WriteLine(yazı.IndexOf("ver")); Console.WriteLine(yazı.IndexOf('t')); Console.WriteLine(yazı.IndexOf('c')); } } Diğer arama metotları ders notlarında mevcut 29

30 String İşlemleri stringnesne.trim() Bir string ifadenin başındaki ve sonundaki boşlukları ya da belirlenmiş karakterleri atar. using System; class tarih { public static void Main() { string a = " ahmet "; Console.WriteLine("budamadan önce"); Console.WriteLine(""+a); a = a.trim (); Console.WriteLine("budamadan sonra"); Console.Write("" + a); } }

31 String İşlemleri PadRight, PadLeft Bir stringin sağına ya da soluna yeni karakterler ilave etmek için kullanılır. string PadRight(int boyut); stringin uzunluğu boyuta eşit olana kadar stringin sağına boşluk ekler string PadRight(int boyut,char a); stringin uzunluğu boyuta eşit olana kadar stringin sağına 'a' karakterini ekler string PadLeft(int boyut); stringin uzunluğu boyuta eşit olana kadar stringin soluna boşluk ekler string PadLeft(int boyut,char a); stringin uzunluğu boyuta eşit olana kadar stringin soluna 'a' karakterini ekler

32 String İşlemleri using System; class tarih { public static void Main() { string a = "Bilgisayar"; Console.WriteLine("Eklemeden önce"); Console.WriteLine(""+a); a = a.padleft(15); Console.WriteLine("Sola Boşluk Eklemeden sonra"); Console.WriteLine("" + a); Console.WriteLine("Karakter Eklemeden sonra"); a = "Bilgisayar"; a = a.padleft(15,'e'); Console.WriteLine("" + a); Console.WriteLine(""); } } 32

33 String İşlemleri bool string.startswith(string a) Metodu çağıran "string a" ile başlıyorsa true, diğer durumlarda false değeri üretir. bool string.endswith(string b) Metodu çağıran "string b" ile bitiyorsa true, diğer durumlarda false değeri üretir. stringnesne.split() Belli bir biçime sahip olan toplu string verileri, belirtilen ayırıcı karakterlerden ayırıp ayrı bir string dizisi üretir. string [] Split(params char[] ayırıcı) string [] Split(params char[] ayırıcı, int toplam) İkinci metotta ise bu parçalama işlemi en fazla toplam sayısı kadar yapılır. string.join() Split metodunun tersi gibi çalışır. Ayrı stringleri belli bir ayırıcı karakter ile birleştirip tek bir string üretir. static string join(string ayırıcı,string[] yazılar) static string join(string ayırıcı,string[] yazı,int başla,int toplam) İkinci metotta ise [basla] dan itibaren toplam kadar yazı elemanı birleştirilir.

34 String İşlemleri using System; class Ayırmaişlemi { public static void Main() { string str="eektronik Bilgisayar Eğitimi Bölümü"; char[] ayırıcı={' '}; string[] ayır=str.split(ayırıcı); foreach(string i in ayır) Console.WriteLine(i); } } 34

35 String İşlemleri using System; class bireştirmeişlemi { public static void Main() { string[] str={"eektronik","bilgisayar","eğitimi","bölümü"}; string birleş=string.join(" ",str); Console.WriteLine(birleş); } } 35

36 String İşlemleri stringnesne.toupper() Stringin karakterlerinin hepsini büyük harfe çevirip geri döndürür. stringnesne.tolower() Stringin karakterlerinin hepsini küçük harfe çevirip geri döndürür. stringnesne.remove(int indeks, int adet) String içinden belli sayıda karakterin atılmasını sağlar. stringnesne.insert(int indeks,string str) String içine belirli indeksten itibaren yeni bir string eklemek için kullanılır. stringnesne.replace(char string c1,char string c2) String içindeki belirlenen karakter ya da karakterleri başkalarıyla değiştirir. stringnesne.substring(int indeks int indeks,int toplam) String ifadenin belli bir kısmının elde edilmesini sağlar.

37 String İşlemleri using System; class digermetotlar { public static void Main() { string str="elektronik Bilgisayar Eğitimi Bölümü"; str=str.toupper(); Console.WriteLine(str+"\n"); str=str.tolower(); Console.WriteLine(str+"\n"); str=str.remove(11,10); Console.WriteLine(str+"\n"); str=str.insert(11,"bilgisayar"); Console.WriteLine(str+"\n"); str=str.replace('b','s'); Console.WriteLine(str+"\n"); str=str.substring(11); Console.WriteLine(str+"\n");//11. karakterlerden sonrasını göster } } 37

38 Biçimlendirme Program çıktılarının belli bir düzende olması oldukça önemlidir. Bazı zamanlar standart çıktıların anlaşılması zor olabilir. Bu problemi çözmek için biçimlendirme teknikleri kullanılır. Bu teknikler yalnızca biçimlendirmeyi destekleyen komutlar tarafından kullanılabilir. Console.WriteLine(), String.Format() ve ToString metotları biçimlendirmeyi destekleyen metotlardır. Bu metotlarda kullanılan { } parantezleri arasındaki ifadeler belli değişkenlerin belli bir düzende biçim metnine aktarılmasını sağlıyordu: Console.WriteLine( Merhaba {0}!,isim)

39 Biçimlendirme En genel kullanımı { değişken_no, genişlik : format} int a=54; Sadece değişken verildiğinde değişkenin türüne göre varsayılan ayarlar kullanılır Genişlik yazılacak olan verinin diğer verilerle olan mesafesini ve hangi yöne hizalanması gerektiğini belirler. Format ise verinin türüne göre değişik biçimlendirilmesini sağlar. Console.WriteLine("{0,10} numara",a); Console.WriteLine("{0,-10} numara",a); 54 numara 54 numara

40 Biçimlendirme Belirleyici Açıklama Duyarlılık Anlamı C/c Para birimi Ondalık basamakların sayısını verir. D/d Tam sayı verisi En az basamak sayısını belirtir, gereğinde bos olan basamaklar sıfır ile beslenir. E/e Bilimsel notasyon Ondalık basamak sayısını verir. F/f Gerçek sayılar (float) Ondalık basamak sayısını verir. G/g E ve F biçimlerinden hangisi kısa ise o kullanılır Ondalık basamak sayısını verir. N/n Virgül kullanarak gerçek sayıları yazar Ondalık basamak sayısını verir. P/p Yüzde Ondalık basamak sayısını verir. X/x Onaltılık sayı sisteminde yazar. En az basamak sayısını belirtir, gereğinde boş olan basamaklar sıfırla beslenir. 40

41 Biçimlendirme using System; class Formatlama { static void Main() { float f=568.87f; int a=105; Console.WriteLine("{0:C3}",a); Console.WriteLine("{0:D5}",a); Console.WriteLine("{0:E3}",f); Console.WriteLine("{0:F4}",f); Console.WriteLine("{0:G5}",a); Console.WriteLine("{0:N1}",f); Console.WriteLine("{0:P}",a); Console.WriteLine("{0:X5}",a); Console.WriteLine("{0:C3}",f); } } 105,000 TL ,689E , ,9 %10.500, ,870 TL 41

42 Biçimlendirme String.Format() ve ToString() Metotları İle Biçimlendirme using System; class StringFormat { public static void Main() { int a=12; string str=string.format("{0:d3}",a); Console.WriteLine(str); } } using System; class Tostring { public static void Main() { int a=12; string str=a.tostring("c3");// (para biçimi) Console.WriteLine(str); } } 42

43 Tarih ve Saat Biçimlendirme using System; class TarihveSaat { public static void Main() { DateTime d=datetime.now; Console.WriteLine(" d-formatı:{0:d}",d); Console.WriteLine(" D-Formatı:{0:D}",d); Console.WriteLine(" t-formatı:{0:t}",d); Console.WriteLine(" T-Formatı:{0:T}",d); Console.WriteLine(" f-formatı:{0:f}",d); Console.WriteLine(" F-Formatı:{0:F}",d); Console.WriteLine(" g-formatı:{0:g}",d); Console.WriteLine(" G-Formatı:{0:G}",d); Console.WriteLine(" m-formatı:{0:m}",d); Console.WriteLine(" M-Formatı:{0:M}",d); Console.WriteLine(" r-formatı:{0:r}",d); Console.WriteLine(" R-Formatı:{0:R}",d); Console.WriteLine(" s-formatı:{0:s}",d); Console.WriteLine(" u-formatı:{0:u}",d); Console.WriteLine(" U-Formatı:{0:U}",d); Console.WriteLine(" y-formatı:{0:y}",d); Console.WriteLine(" Y-Formatı:{0:Y}",d); } } 43

44 Biçimlendirme Standart biçimlendirmelerin dışında özel biçimlendirmeler de tasarlanabilir. #,. 0 E ve % karakterleri ile özel biçimlendirmeler oluşturulabilir. # Rakam değerleri için kullanılır., Büyük sayılarda binlikleri ayırmak için kullanılır.. Gerçek sayılarda ondalıklı kısımları ayırmak için kullanılır. 0 Yazılacak karakterin başına ya da sonuna 0 ekler. % Yüzde ifadelerini belirtmek için kullanılır. E0, e0, E+0, e+0, E-0, e-0 Sayıları bilimsel notasyonda yazmak için kullanılır. {0:#,###.##} {0:#%} {0:#,###E+0}

45 Biçimlendirme using System; class özelbiçimlendirme { public static void Main() { Console.WriteLine("{0:#,###}", ); Console.WriteLine("{0:#.##}", ); Console.WriteLine("{0:#,###E+0}", ); Console.WriteLine("{0:#%}",0.123); } }

46 Biçimlendirme Düzenli İfadeler Düzenli ifadeler değişken sayıda karakterden oluşabilecek ancak belirli koşulları sağlayan ifadelerdir. Örneğin e-posta adreslerini düşünebiliriz. Dünyada milyonlarca e-posta adresi olmasına ve farklı sayıda karakterden oluşabilmesine rağmen hepsi tipi düzenindedir. Örneğin bu düzenli ifadeye uymaktadır. C#'taki düzenli ifade işlemleri temel olarak System.Text.RegularExpressions isim alanındaki Regex sınıfı ile yapılmaktadır. Bir karakter dizisinin oluşturulan düzenli ifadeye uyup uymadığını yine bu isim alanındaki Match sınıfıyla anlarız. Düzenli ifadeler başlı başına bir kitap olabilecek bir konudur. Burada sadece ana hatları üzerinde durulacaktır.

47 Biçimlendirme Düzenli İfadelerin Oluşturulması Bir ifadenin mutlaka istediğimiz karakterle başlamasını istiyorsak ^ karakterini kullanırız. Örneğin ^9 düzenli ifadesinin anlamı yazının mutlaka 9 karakteri ile başlaması demektir. "9Abc" yazısı bu düzene uyarken "f9345" bu düzene uymaz. Belirli karakter gruplarını içermesi istenen düzenli ifadeler için \ karakteri kullanılır: \D ifadesi ile yazının ilgili yerinde rakam olmayan tek bir karakterin bulunması gerektiği belirtilir. \d ifadesi ile yazının ilgili yerinde 0-9 arası tek bir karakterin bulunması gerektiği belirtilir. \W ifadesi ile yazının ilgili yerinde alfanumerik olmayan karakterin bulunması gerektiği belirtiliyor. Alfanumerik karakterler a-z, A-Z ve 0-9 aralıklarındaki karakterlerdir. \w ifadesi ile yazının ilgili yerinde bir alfanumerik karakterin bulunması gerektiği belirtiliyor. \S ifadesi ile yazının ilgili yerinde boşluk veya tab karakterleri haricinde bir karakterin olması gerektiği belirtiliyor. \s ifadesi ile yazının ilgili yerinde yalnızca boşluk veya tab karakterlerinden biri bulunacağı belirtiliyor.

48 Biçimlendirme Bu öğrendiğimiz bilgiler ışığında 5 ile başlayan, ikinci karakteri rakam olmayan, üçüncü karakteri ise boşluk olan bir düzenli ifade şöyle gösterilebilir: ^5\D\s Tahmin edersiniz ki aynı zamanda burada düzenli ifademizin yalnızca 3 harfli olabileceği belirttik. Yukarıdaki ^5\D\s ifadesine filtre denilmektedir. Belirtilen gruptaki karakterlerden bir ya da daha fazlasının olmasını istiyorsak + işaretini kullanırız. \w+ filtresi ilgili yerde bir ya da daha fazla alfanumerik karakterin olabileceğini belirtiyor. "123a" bu filtreye uyarken "@asc" bu filtreye uymaz. + yerine * kullansaydık çarpıdan sonraki karakterlerin olup olmayacağı serbest bırakılırdı. Birden fazla karakter grubundan bir ya da birkaçının ilgili yerde olacağını belirtmek için (mantıksal veya) karakteri kullanılır. Örnek: m n s ifadesinde ilgili yerde m, n ya da s karakterlerinden biri olmalıdır. Bu ifadeyi parantez içine alıp sonuna + koyarsak bu karakterlerden biri ya da birkaçının ilgili yerde olacağını belirtmiş oluruz: (m n s)+

49 Biçimlendirme Sabit sayıda karakterin olmasını istiyorsak {adet} şeklinde belirtiriz. Örnek: \d{3}-\d{5} filtresine " " uyarken " " uymaz.? karakteri, hangi karakterin sonuna gelmişse o karakterden en az sıfır en fazla bir tane olacağı anlamına gelir. Örnek: \d{3}b?a Bu filtreye "548A" veya "875BA" uyarken "875BBA" uymaz.. (nokta) işareti ilgili yerde "\n" dışında bir karakterin bulunabileceğini belirtir. Örneğin \d{3}.a filtresine "123sA" ve "8766A" uyar. "236\nA"; uymaz \b bir kelimenin belirtilen yazıyla sonlanması gerektiğini belirtir. Örnek: \d{3}dır\b filtresine "123dır" uyarken "123dırb" uymaz.

50 Biçimlendirme \B ile bir kelimenin başında ya da sonunda bulunmaması gereken karakterler belirtilir. Örnek: \d{3}dır\b filtresine "123dır" veya "dır123" uymazken "123dır8" uyar. Köşeli parantezler kullanarak bir karakter aralığı belirtebiliriz. Örneğin ilgili yerde sadece büyük harflerin olmasını istiyorsak [A-Z] şeklinde, ilgili yerde sadece küçük harfler olmasını istiyorsak [a-z] şeklinde, ilgili yerde sadece rakamlar olmasını istiyorsak [0-9] şeklinde belirtebiliriz. Ayrıca sınırları istediğimiz şekilde değiştirebiliriz. Örneğin [R-Y] ile ilgili yerde yalnızca R ve Y arası büyük harfler olabileceğini belirtiriz. Regex sınıfı Regex sınıfı bir düzenli ifadeyi tutar. Bir Regex nesnesi şöyle oluşturulur: Regex nesne=new Regex(string filtre); Yani bu yapıcı metoda yukarıda oluşturduğumuz filtreleri parametre olarak veririz. Regex sınıfının Match metodu ise kendisine gönderilen bir yazının düzenli ifadeye uyup uymadığını kontrol eder ve uyan sonuçları Match sınıfı türünden bir nesne olarak tutar.

51 Biçimlendirme Match sınıfı Match sınıfının NextMatch() metodu bir Match nesnesindeki bir sonraki düzenli ifadeyi döndürür. Yazının düzenli ifadeye uyup uymadığının kontrolü ise Match sınıfının Success özelliği ile yapılır. Eğer düzenli ifadeye uygun bir yapı varsa Success özelliğinin tuttuğu değer true olur. Örnek: A\d{3}(a o)+ Bu filtreyle düzenli ifademizin şöyle olduğunu söyleyebiliriz: İlk karakter A olacak. A'dan sonra üç tane rakam gelecek. Üç rakamdan sonra "a" ya da "o" karakterlerinden biri ya da birkaçı gelecek.

52 Biçimlendirme using System; using System.Text.RegularExpressions; class duzenli { static void Main() { string filtre=@"a\d{3}(a o)+"; Console.Write("Yazı girin: "); string yazi=console.readline(); Regex nesne=new Regex(filtre); Match a=nesne.match(yazi); Console.WriteLine(a.Success); Console.WriteLine(a.ToString()); Console.WriteLine(a.Index); Console.WriteLine(a.NextMatch()); Console.WriteLine(a.Index); } } Bu programda kullanıcının A123aA657oA456oao girdiğini varsayarsak ekran çıktısı şöyle olur. True A123a 0 A657o 10

53 Nesne Yönelimli Programlama ve Kalıtım

54 Nesne Yönelimli Programlama Modern dillerin bir çoğunda nesneye yönelimli programlama tekniği desteklenmektedir. Bu teknik yazılım geliştirmeyi kısaltan ve sistematik hale getiren bir yapıdır C# dili de bu tekniği tamamıyla desteklemektedir. Nesne yönelim tekniği, gerçek hayatı programlar için simule edecek yöntemlerin birleşimidir. Bu teknikte geliştirilmek istenen sistem parçalara ayrılır ve bu parçalar arasında ilişkiler kurulur. Parçalar hiyerarşik ya da bağımsız olabilir. Bağımsız bileşenler birbirleriyle haberleşerek etkileşimde bulunurlar.

55 Nesne Yönelimli Programlama Nesne yönelimli programlama kavramlarından bazıları şunlardır: Nesne yönelimli programlama tekniğinin en temel bileşeni nesnelerdir. Nesneler içeriklerinde veriler barındırırlar. Veriler arası ilişkiler sağlayan fonksiyonlara da sahiptirler. Nesnelerin veri ve fonksiyon gibi bileşenleri içermesine sarmalama (encapsulation) denilir. Nesne içindeki veriler ve fonksiyonlar nesnenin dışarıya nasıl hizmet verdiğini belirler. Fakat bu hizmeti nasıl verdiği belli değildir. Nesnenin hizmetlerinden faydalanmak için nesnenin dış dünyadan erişilen ara yüzünün bilinmesi yeterlidir. Buna bilgi saklama (information hiding) adı verilir. Nesnelerin birbirlerinden bağımsız olmasına rağmen aralarında haberleşebilirler. Hangi nesnenin hangi nesneye mesaj göndereceği, hangi nesnelerin fonksiyonlarının kullanılacağı derleme aşamasında belli olmayabilir. Bu durumda geç bağlama (late binding) mekanizmasından faydalanılır.

56 Nesne Yönelimli Programlama Tüm nesneler birer sınıf örneğidir. Sınıflar nesnelerin özelliklerini belirlerler. Nesneler derleme ya da çalışma anında oluşturulabilir. Kalıtım ile nesneler birbirinden türetilebilir. Türeyen sınıf diğer sınıfın tüm özelliklerini ve kendine has özellikleri içerebilir. Kalıtım yolu ile türetilmiş sınıflar ile hiyerarşik sınıf organizasyonu gerçekleştirilebilir. Nesneye yönelimli programlama tekniğinde nesneler çok biçimli olabilir. Çok biçimlilik (polymorphism) kavramı türeme ile alakalıdır ve anlamı bir nesnenin farklı şekillerde davranabilmesidir.

57 Nesne Yönelimli Programlama Nesne Kavramı Gerçek dünyadaki varlığını bildiğimiz bir çok şey birer nesnedir. Nesne yönelimli programlama tekniğinde de sınıflar nesnelerin biçimlerini belirlerler. Oluşturulan nesneler sınıf türünden nesne olarak adlandırılır. Her nesne kendi içinde tutarlı bir yapıya sahiptir yani veriler arasında sıkı bir bağ bulunur ki bu nesne mantığının temelidir. Sınıflardan nesneler oluşturmak için new anahtar sözcüğü kullanılıyordu. Sinif nesne = new Sinif(); Sınıflar nesnelerin şeklini belirlerler. Yani nesnenin türünü tanımlarlar. Kısaca sınıflar bir tür bilgisidir.

58 Kalıtım (Inheritance) Kalıtım nesne yönelimli programlama tekniğinin en önemli özelliğidir. Kalıtım yolu ile sınıflar birbirinden türetilir. Türeyen sınıflar türedikleri sınıfın özelliklerini kalıtım yoluyla devralırlar ve kendisi de yeni özellikler tanımlayabilir. Türetme ile sınıflar arasında hiyerarşik bir yapı kurulabilir. Örnek vermek gerekirse dünya üzerinde yaşayan canlıları sınıflandırmak mümkün. Bu sınıflardan bir tanesi de hayvanlar olabilir. Kedi, Köpek, Kuş, Balık gibi bir çok hayvan türünden bahsedilebilir. Her türün kendine ait değişik özellikleri olabilir. Dolayısıyla her biri için değişik sınıfların tasarlanması gerekebilir. 58

59 Kalıtım (Inheritance) Fakat ortak bir takım özelliklerinin olması da kaçınılmazdır ve her biri için bağımsız sınıflar tasarlandığında bu benzerlikler her birisi için tekrarlanmak durumunda kalacaktır. Bu yüzden önce tüm hayvanlar için bir sınıf oluşturulup diğer kedi, köpek gibi sınıflar bu sınıfın devamı gibi tasarlanabilir. İşte temelde bir sınıf tanımlanıp diğer sınıfları bu sınıftan türeterek özelleştirmeye kalıtım yoluyla türetme adı verilir. Türetme yapmak için sınıf tanımlaması şu şekilde yapılmalıdır: Türetme işleminden sonra türetilen sınıf temel sınıfın bütün özelliklerine sahip olur.

60 Kalıtım (Inheritence) Tip güvenliği olan dillerde farklı türdeki nesnelerin birbirine atanması istisna durumlar dışında yasaktır. Bu istisna durumlardan biri de türemiş sınıfın referansının temel sınıfa ilişkin bir referansa atanabilmesidir. Bu durumda temel sınıf türeyen sınıfın tüm özelliklerine erişemeyecek olmasına rağmen atama işlemi yapılabilmektedir. Örneğin: Bir Hayvan sınıfı oluşturulsun; her hayvanın boy, ağırlık gibi fiziksel özellikleri olsun. Ardından bu sınıftan bir Kedi sınıfı tanımlayalım. Hayvan sınıfında boy ve ağırlığı gösteren OzellikGoster() isimli bir metot olsun. Kedi sınıfında da hayvanın kedi olduğunu gösteren string tipinde özel bir değişken tanımlı olsun. 60

61 Kalıtım (Inheritence) class Hayvan //temel sınıf { public double boy; public double agirlik; public void OzellikGoster() { Console.WriteLine( Boy= +boy); Console.WriteLine( Agirlik= +agirlik); } } Ayrıca Kedi sınıfında kedinin türünü yazacak bir de metot olsun. Türetme aşağıdaki şekilde gerçekleştirilir; class Kedi : Hayvan//türetilmiş sınıf { public string Turu; } public void TurGoster() {Console.WriteLine( Tur= +Turu);} Burada Kedi türetilmiş(derived) sınıf, Hayvan da temel (based) sınıftır. 61

62 Kalıtım (Inheritence) class MainMetot { static void Main() { Kedi k1= new Kedi(); k1.agirlik=5; k1.boy=10; k1.turu= van ; k1.ozellikgoster(); k1.turgoster(); } } Hayvan h1= new Hayvan(); h1.agirlik=5; h1.boy=10; //h1.turu= van ; //HATA!!! h1.ozellikgoster(); //h1.turgoster(); //HATA!!! 62

63 Kalıtım (Inheritence) Kalıtım yolu ile public ve protected elemanlar aktarılır. Diğer sınıfların kullanımına kapalı ancak türetme ile türemiş sınıfa geçebilen özellikler protected anahtar sözcüğü kullanılır. Eğer türetme söz konusu değilse protected olarak bilinen elemanlarla private olanlar arasında bir fark olmayacaktır. private özelliklere türetilen sınıflardan erişilemez. protected özellikler ise türeyen sınıfa private olarak geçer. 63

64 Kalıtım (Inheritence) C#'ta yapıcı metotların türetimiyle ilgili şu kurallar geçerlidir: C#'ta yapıcı metotlar fiziksel olarak türetilmez. Türemiş sınıf türünden bir nesne yaratıldığında önce ana sınıfın parametre almayan yapıcı metodu, ardından türemiş sınıftaki imzaya uyan yapıcı metot çalıştırılır. Türemiş sınıf türünden nesne yaratımında daima türemiş sınıfın imzaya uyan bir yapıcı metodu olması gerekir. Türemiş sınıf türünden nesne yaratımlarında, ana sınıfın parametre almayan yapıcı metodu yavru sınıfın üye elemanlarıyla işlem yapar. Türemiş sınıf türünden nesne yaratımında, Türemiş sınıftaki ilgili yapıcı metoda base takısı eklenmişse ana sınıfın parametre almayan yapıcı metodu çalıştırılmaz. 64

65 Kalıtım (Inheritence) public Hayvan() { Console.WriteLine("hayvan kurucu..."); Boy = 0.1; Agirlik = 0.2; } // temel sınıf yapıcısı public Kedi() { Agirlik = 0; Console.WriteLine("kedi kurucusu..."); } // Türmeiş sınıf yapısıcısı Main içinde tanımlı satırlar; Kedi k1 = new Kedi(); k1.ozellikgoster(); Console.ReadKey(); Ekran çıktısı; İlk önce temel kurucu çalıştı, boy ve ağırlık değerlerini 0.1 ve 0.2 değerlerine eşitledi, ardından türemişin kurucusu çalıştı ve ağırlık değerini 0 yaptı, boy değerini ise türemiş kurucuda herhangi bir işlem yapılmadığı için temel sınıfın kurucu değerini kullanmış oldu. 65

66 Kalıtım (Inheritence) using System; class A { public int x; private int y; protected int z; public A() { x = 1; y = 2; z = 3; Console.WriteLine ("A yapıcısı çalıştı..."); } public void Listele() { Console.WriteLine("x={0}; y={1}; z={2};", x, y, z ); } } class T : A { public string s; public T() {s = "Türemiş Sınıf"; Console.WriteLine("T yapıcısı çalıştı..."); } public void Yaz() { Console.WriteLine("s={0}; x={1}; z={2};", s, x, z); } } class Program { static void Main() { T t = new T(); t.listele(); t.yaz(); } } 66

67 Kalıtım (Inheritence) Programdaki hatayı bulunuz. using System; class ana { public ana(int a){} } class yavru:ana { } class esas { static void Main() { yavru y=new yavru(); } } Bu program hata verir. ana sınıfta parametre almayan bir yapıcı metot yoktur. Ana sınıfta bir yapıcı metot tanımlandığı için varsayılan yapıcı metot oluşturulmamıştır. 67

68 Kalıtım (Inheritence) base anahtar sözcüğü Yapıcı metotlar aşırı yüklenmişse türemiş sınıfın yapıcı metotları çağrılırken belli değerlerle temel sınıfında yapıcı metodunun çağrılması mümkündür ve bu işlem base anahtar sözcüğü ile yapılır. base anahtar sözcüğü yalnızca yapıcı metotlarla kullanılabilir. Yani base anahtar sözcüğünü yalnızca türemiş sınıftaki yapıcı metoda ekleyebiliriz ve base anahtar sözcüğünün ana sınıfta var olan bir yapıcı metodu belirtmesi gerekir. Public T(string s, int x, int z): base (int x, int z) 68

69 Örnekler using System; class A { public int Ozellik1; public int Ozellik2; public A() { Console.WriteLine("Deneme"); } public A(int ozellik1,int ozellik2) { Ozellik1=ozellik1; Ozellik2=ozellik2; } } class B:A { public int Ozellik3; public int Ozellik4; public B( int ozellik3,int ozellik4, int ozellik1,int ozellik2): base(ozellik1,ozellik2) { Ozellik3=ozellik3; Ozellik4=ozellik4; } } class esas { static void Main() { B b=new B(3,4,1,2); Console.WriteLine (b.ozellik1+" "+b.ozellik2+" "+b.ozellik3+" "+b.ozellik4); } } Bu program ekrana yazar. Bu örnekte base anahtar sözcüğü ana sınıftaki yapıcı metodu temsil etmektedir. Türemiş sınıfta base sadece ana sınıftaki değer alan yapıcıya gittiğinden ana sınıfın boş yapıcı metodu çalışmaz 69

70 Çoklu kalıtım (türetme) Sınıflar, ard arda türetilebilir. Yani örneğin B sınıfı A sınıfında türetilip C sınıfı da B sınıfından türetilebilir. Bu durumda C sınıfı türünden bir nesne yarattığımızda eğer C sınıfının ilgili yapıcı metoduna base takısını eklememişsek önce A, sonra B, sonra da C sınıfının yapıcı metotları çalıştırılır. Yani gidişat temel sınıftan türemiş sınıfa doğrudur. C sınıfı hem A'nın hem de B'nin bütün üye elemanlarına sahip olur. Örnek: 70

71 Çoklu kalıtım (türetme) using System; class A { public A() { Console.WriteLine("A sınıfı"); } } class B:A { public B() { Console.WriteLine("B sınıfı"); } } class C:B { public C() { Console.WriteLine("C sınıfı"); } static void Main() { C nesne=new C(); } } A sınıfı B sınıfı C sınıfı 71

72 Çoklu kalıtım (türetme) Örnek class A { public int a; public A(int a) { Console.WriteLine("a kurucusu"); this.a =a; } } class B : A { public int b; public B(int a,int b) : base(a) { Console.WriteLine("b kurucusu"); this.b = b; } } 72

73 Çoklu kalıtım (türetme) class C : B { public int c; public void yaz() { Console.WriteLine(" a b c" +a+b+c ); } public C(int a,int b,int c) : base(a,b) { Console.WriteLine("c kurucusu"); this.c = c; } } class deneme { } static void Main(string[] args) { } C cc = new C(3,4,5); cc.yaz(); Console.ReadKey(); 73

74 Çoklu kalıtım (türetme) Örnek using System; class A { public int OzellikA; public A(int a) { OzellikA=a; } } class B:A { public int OzellikB; public B (int b) { OzellikB=b; } } class C:B { public int OzellikC; public C(int c,int b):base(b) { OzellikC=c; } static void Main() { C nesne=new C(12,56); Console.WriteLine( nesne.ozellika+" "+nesne.ozellikb+" "+nesne.ozellikc); } } // Hata verir C nesnesi oluşturulurken base ile değeri B sınıfa gönderdi. B sınıfının yapıcı metodu çalıştırıldı fakat B sınıfının yapıcı metodunda base takısı olmadığı için B sınıfına göre ana sınıfın (A sınıfı) parametre almayan yapıcı metodu çalıştırılmaya çalışılmıştır. A sınıfının parametre almayan yapıcı metodu olmadığı için program hata vermiştir. Çözüm: public B (int b):base (b); B sınıfı değer göndermeyecek ise A ve B sınıflarında varsayılan yapıcılar da tanımlanacak. public A() {} public B() {} 74

75 İsim Saklama (Name Hiding) Türemiş sınıfta bazen temel sınıftaki üye elemanla aynı isimli bir eleman tanımlanmış olabilir. Bu durumda temel sınıftaki elemana normal yollarda erişmek mümkün değildir çünkü türeyen sınıftaki eleman temel sınıftaki elemanı gizlemiştir. Temel sınıftaki elemana erişmek için yine base anahtar sözcüğünden faydalanılır. Base ile hem özelliklere hem de metotlara erişilebilir. base anahtar sözcüğünün bu şekildeki gibi kullanımı this referansına benzemektedir. this referansı kendisini çağıran sınıfı temsil ederken base anahtar sözcüğü türetmenin yapıldığı temel sınıfı temsil eder. 75

76 İsim Saklama (Name Hiding) class X { protected int a; //public X() { } public X(int a) { this.a=a; } public int A //dikkat { get { Console.WriteLine( X ); return a; } } } class Y: X { protected int b; public Y(int b) :base(b) { this.b=base.a; } public int A // dikkat- public new int A { } get { Console.WriteLine( Y sınıfı ); return b; } } class Program { static void Main() { Y y=new Y(5); int deneme=y.a; } } Program uyarısı; (Uyarı) Y.A elemanı X.A elemanını gizlemiştir. Bu yüzden burada new anahtarı kullanılabilir. Her zaman isim gizlenmesi yaparken isim gizlemeyi açıkça belirtmek için temel sınıftaki bir elemanı gizlerken türemiş sınıftaki elemanın bildirimine new anahtarı eklemeliyiz. Bu sayede uyarıyı almayı da engellemiş oluruz. base(b) parametresi olmasaydı // public X() {} yapıcı metodunu tanımlamak zorundaydık. X Parametreli yapıcısı olduğundan varsayılan yapıcı metodu Y sınıfı çağıramazdı. 76

77 İsim Saklama (Name Hiding) Örnek using System; class A { public int a; public A() { a = 1; } } class T : A { public int a; public T() { a = 2; } } class Program { static void Main() { T t = new T(); Console.WriteLine(t.a); } } using System; class A { public int a; public A() { a = 1; } } class T : A { public new int a; public int b ; public T() { a = 2; b = base.a; } } class Program { static void Main() { T t = new T(); Console.WriteLine(t.a); Console.WriteLine(t.b); Console.ReadLine(); } } 77

78 78

79 System.BitConverter // * * * *0=46513

80 System.Buffer Örnek Short (2 byte) 0.byte 1.byte 2.byte 3.byte 4.byte 1 2* * byte // (SetByte ile 5. byte ekleme) 3*256 Byte 8 bit Short 16 bit 2* *256 0 =513 1* *256 0 =256 3* *256 0 =768

81 Örnekler

82 Örnekler:

83 Örnek:

84 Örnek using System; class Kedi { protected int ayaksayisi = 4 ; public void yakalaav() { Console.WriteLine("Kedi sinifi Av yakaladi"); } } class Kaplan : Kedi { public Kaplan() { Console.WriteLine("Ayak Sayisi = " + ayaksayisi); } } class deneme { public static void Main(string[] args) { Kedi kd= new Kedi() ; kd.yakalaav(); Kaplan kp = new Kaplan(); kp.yakalaav(); } } 84

85 Örnek using System; public class Hayvan { protected String a = "Hayvan.a"; String b = "Hayvan.b"; //friendly private String c = "Hayvan.c"; public String d = "Hayvan.d"; } public class Kedi:Hayvan { // Türeyen public Kedi() { Console.WriteLine("Kedi olusturuluyor"); Console.WriteLine(a); //Console.WriteLine(b); //! Hata! erisemez? //Console.WriteLine(c); //! Hata! erisemez? Console.WriteLine(d); } } class deneme { public static void Main(string[] args) { Kedi k = new Kedi(); } } 85

86 Örnek 86

87 Örnek Yukarıdaki programda, base anahtar sözcüğü sınıf hiyerarşisinin en tepesindeki sınıfı temsil etmektedir. C sınıfında base anahtar sözcüğü B sınıfı anlamına gelirken, B sınıfında base anahtar sözcüğü A sınıfı anlamına gelmektedir. 87

Daha göster

Öğretici: Visual Studio kullanarak .NET ile bir .NET sınıf kitaplığını test edin

Bu öğreticide, bir çözüme test projesi ekleyerek birim testlerini otomatikleştirme adımları gösterilmektedir.

Önkoşullar

Birim testi projesi oluşturma

Birim testleri, geliştirme ve yayımlama sırasında otomatik yazılım testi sağlar. MSTest , aralarından seçim yapabileceğiniz üç test çerçevesinden biridir. Diğerleri xUnit ve nUnit'tir.

  1. Visual Studio’yu çalıştırın.

  2. Visual Studio kullanarak .NET sınıf kitaplığı oluşturma bölümünde oluşturduğunuz çözümü açın.

  3. Çözüme "StringLibraryTest" adlı yeni bir birim testi projesi ekleyin.

    1. Çözüm Gezgini'da çözüme sağ tıklayın veYeni Proje Ekle'yi> seçin.

    2. Yeni proje ekle sayfasında, arama kutusuna mstest yazın. Dil listesinden C# veya Visual Basic'i seçin ve ardından Platform listesinden Tüm platformlar'ı seçin.

    3. MSTest Test Projesi şablonunu ve ardından İleri'yi seçin.

    4. Yeni projenizi yapılandırın sayfasında Proje adı kutusuna StringLibraryTest yazın. Ardından İleri'yi seçin.

    5. Ek bilgiler sayfasında, Çerçeve kutusunda .NET 7 (Standart vadeli destek) öğesini seçin. Ardından Oluştur’u seçin.

  4. Visual Studio projeyi oluşturur ve aşağıdaki kodla kod penceresinde sınıf dosyasını açar. Kullanmak istediğiniz dil gösterilmiyorsa, sayfanın üst kısmındaki dil seçiciyi değiştirin.

    Birim testi şablonu tarafından oluşturulan kaynak kodu aşağıdakileri yapar:

    [TestClass] ile etiketlenmiş bir test sınıfında [TestMethod] ile etiketlenen her yöntem, birim testi çalıştırıldığında otomatik olarak yürütülür.

Proje başvurusu ekleme

Test projesinin sınıfıyla çalışması için, stringLibraryTest projesine projeye bir başvuru ekleyin.

  1. Çözüm Gezgini'daStringLibraryTest projesinin Bağımlılıklar düğümüne sağ tıklayın ve bağlam menüsünden Proje Başvurusu Ekle'yi seçin.

  2. Başvuru Yöneticisi iletişim kutusunda Projeler düğümünü genişletin ve StringLibrary'nin yanındaki kutuyu seçin. Derlemeye başvuru eklemek, derleyicinin StringLibraryTest projesini derlerken StringLibrary yöntemlerini bulmasını sağlar.

  3. Tamam’ı seçin.

Birim testi yöntemleri ekleme ve çalıştırma

Visual Studio bir birim testi çalıştırdığında, özniteliğiyle işaretlenmiş bir sınıfta özniteliğiyle TestMethodAttributeTestClassAttribute işaretlenmiş her yöntemi yürütür. İlk hata bulunduğunda veya yöntemin içerdiği tüm testler başarılı olduğunda bir test yöntemi sona erer.

En yaygın testler sınıfın üyelerini Assert çağırır. Birçok onaylama yöntemi, biri beklenen test sonucu, diğeri ise gerçek test sonucu olan en az iki parametre içerir. Sınıfın en sık çağrılan yöntemlerinden bazıları aşağıdaki tabloda gösterilmiştir:

Assert yöntemleriİşlev
İki değerin veya nesnenin eşit olduğunu doğrular. Değerler veya nesneler eşit değilse onay başarısız olur.
İki nesne değişkeninin aynı nesneye başvurduğunu doğrular. Değişkenler farklı nesnelere başvuruda bulunursa onay başarısız olur.
Koşulun olduğunu doğrular. Koşul ise onay başarısız olur.
Bir nesnenin olmadığını doğrular. nesnesi ise onay başarısız olur.

Oluşturması Assert.ThrowsException beklenen özel durum türünü belirtmek için bir test yönteminde yöntemini de kullanabilirsiniz. Belirtilen özel durum oluşturulmazsa test başarısız olur.

yöntemini test etmek için büyük harf karakterle başlayan bir dizi dize sağlamak istiyorsunuz. Bu durumlarda yönteminin döndürülmesini beklersiniz, böylece yöntemini çağırabilirsiniz Assert.IsTrue . Benzer şekilde, büyük harf karakterden başka bir şeyle başlayan bir dizi dize sağlamak istiyorsunuz. Bu durumlarda yönteminin döndürülmesini beklersiniz, böylece yöntemini çağırabilirsiniz Assert.IsFalse .

Kitaplık yönteminiz dizeleri işlediğinden, boş bir dizeyi (), karakteri olmayan ve 0 olan Length geçerli bir dizeyi ve başlatılmamış bir dizeyi başarıyla işlediğinden de emin olmak istersiniz. Doğrudan statik bir yöntem olarak çağırabilir ve tek String bir bağımsız değişken geçirebilirsiniz. Alternatif olarak, öğesine atanmış bir değişkende uzantı yöntemi olarak da çağırabilirsiniz.

Her biri bir dize dizisindeki her öğe için bir Assert yöntem çağıran üç yöntem tanımlayacaksınız. Test hatası durumunda görüntülenecek bir hata iletisi belirtmenize olanak tanıyan bir yöntem aşırı yüklemesini çağıracaksınız. İleti, hataya neden olan dizeyi tanımlar.

Test yöntemlerini oluşturmak için:

  1. UnitTest1.cs veya UnitTest1.vb kod penceresinde kodu aşağıdaki kodla değiştirin:

    yöntemindeki büyük harfli karakterlerin testinde Yunanca büyük alfa (U+0391) ve Kiril büyük harf EM (U+041C) bulunur. yöntemindeki küçük harfli karakterlerin testinde Yunanca küçük alfa (U+03B1) ve Kiril küçük harfi Ghe (U+0433) bulunur.

  2. Menü çubuğundaUnitTest1.csDosyasını> Farklı Kaydet'i veyaUnitTest1.vb> Dosyasını Farklı Kaydet'i seçin. Dosyayı Farklı Kaydet iletişim kutusunda Kaydet düğmesinin yanındaki oku seçin ve Kodlama ile Kaydet'i seçin.

    Visual Studio Dosyayı Farklı Kaydet iletişim kutusu

  3. Farklı Kaydet'i Onayla iletişim kutusunda Evet düğmesini seçerek dosyayı kaydedin.

  4. Gelişmiş Kaydetme Seçenekleri iletişim kutusunda, Kodlama açılan listesinden Unicode (imzalı UTF-8) - Kod sayfası 65001'i seçin ve Tamam'ı seçin.

    Visual Studio Gelişmiş Kaydetme Seçenekleri iletişim kutusu

    Kaynak kodunuzu UTF8 ile kodlanmış bir dosya olarak kaydedemezseniz Visual Studio bunu ASCII dosyası olarak kaydedebilir. Bu durumda çalışma zamanı ASCII aralığının dışındaki UTF8 karakterlerinin kodunu doğru şekilde çözmez ve test sonuçları doğru olmaz.

  5. Menü çubuğundaTest Tüm Testleri Çalıştır'ıseçin>. Test Gezgini penceresi açılmazsa Test Test>Gezgini'ni seçerek açın. Üç test , Başarılı Testler bölümünde listelenir ve Özet bölümü test çalıştırmasının sonucunu bildirir.

    Testleri geçen Test Gezgini penceresi

Test hatalarını işleme

Test temelli geliştirme (TDD) yapıyorsanız, önce testleri yazarsınız ve ilk kez çalıştırdığınızda başarısız olurlar. Ardından uygulamaya testin başarılı olmasını sağlayan kod eklersiniz. Bu öğreticide, doğruladığınız uygulama kodunu yazdıktan sonra testi oluşturdunuz ve testin başarısız olduğunu görmediniz. Testin başarısız olmasını beklediğiniz zaman başarısız olduğunu doğrulamak için test girişine geçersiz bir değer ekleyin.

  1. yöntemindeki dizisini "Error" dizesini içerecek şekilde değiştirin. Visual Studio, testleri çalıştırmak için bir çözüm oluşturulduğunda açık dosyaları otomatik olarak kaydettiğinden dosyayı kaydetmeniz gerekmez.

  2. Menü çubuğundan Test>Tüm Testleri Çalıştır'ı seçerek testi çalıştırın. Test Gezgini penceresi iki testin başarılı ve birinin başarısız olduğunu gösterir.

    Başarısız testler içeren Test Gezgini penceresi

  3. Başarısız olan testi seçin.

    Test Gezgini penceresinde, onay tarafından oluşturulan ileti görüntülenir: "Assert.IsFalse başarısız oldu. 'Hata' bekleniyor: false; actual: True". Hata nedeniyle, "Hata" sonrasında dizideki hiçbir dize test edilmedi.

    IsFalse onay hatasını gösteren Test Gezgini penceresi

  4. 1. adımda eklediğiniz "Error" dizesini kaldırın. Testi yeniden çalıştırın ve testler başarılı oldu.

Kitaplığın Sürüm sürümünü test edin

Artık tüm testler kitaplığın Hata Ayıklama derlemesi çalıştırılırken geçtiğine göre, testleri kitaplığın Yayın derlemesine karşı ek bir süre çalıştırın. Derleyici iyileştirmeleri de dahil olmak üzere çeşitli faktörler bazen Hata Ayıklama ve Yayın derlemeleri arasında farklı davranışlar üretebilir.

Yayın derlemesini test etmek için:

  1. Visual Studio araç çubuğunda derleme yapılandırmasını Hata Ayıkla yerine Yayın olarak değiştirin.

    Yayın derlemesi vurgulanmış Visual Studio araç çubuğu

  2. Çözüm Gezgini'daStringLibrary projesine sağ tıklayın ve kitaplığı yeniden derlemek için bağlam menüsünden Oluştur'u seçin.

    Build komutuyla StringLibrary bağlam menüsü

  3. Menü çubuğundanTüm Testleri Test> Et'i seçerek birim testlerini çalıştırın. Testler başarılı oldu.

Testlerde hata ayıklama

IDE olarak Visual Studio kullanıyorsanız Öğretici: Birim testi projenizi kullanarak kodda hata ayıklamak için Visual Studio kullanarak bir .NET konsol uygulamasında hata ayıklama bölümünde gösterilen işlemi kullanabilirsiniz. ShowCase uygulama projesini başlatmak yerine StringLibraryTests projesine sağ tıklayın ve bağlam menüsünden Hata Ayıklama Testleri'ni seçin.

Visual Studio, test projesini hata ayıklayıcı ekli olarak başlatır. Yürütme, test projesine veya temel alınan kitaplık koduna eklediğiniz herhangi bir kesme noktasında durdurulacaktır.

Ek kaynaklar

Sonraki adımlar

Bu öğreticide bir sınıf kitaplığını birim olarak test ettiniz. Kitaplığı NuGet'e paket olarak yayımlayarak başkalarının kullanımına sunabilirsiniz. Nasıl yapılacağını öğrenmek için NuGet öğreticisini izleyin:

Bir kitaplığı NuGet paketi olarak yayımlarsanız, diğerleri kitaplığı yükleyip kullanabilir. Nasıl yapılacağını öğrenmek için NuGet öğreticisini izleyin:

Kitaplığın paket olarak dağıtılması gerekmez. Bunu kullanan bir konsol uygulamasıyla paketlenebilir. Konsol uygulamasını yayımlamayı öğrenmek için bu serinin önceki öğreticisine bakın:

nest...

batman iftar saati 2021 viranşehir kaç kilometre seferberlik ne demek namaz nasıl kılınır ve hangi dualar okunur özel jimer anlamlı bayram mesajı maxoak 50.000 mah powerbank cin tırnağı nedir