|
BitArray Sınıfı, Indeksleyiciler ve Özellikler |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bu yazımda sizlere BitArray sınıfının kullanımı ve tanımı hakkında bilgiler vereceğim. Bunu
yaparken de C# a yeni başlayanlar için indeksleyiciler ve özellikler kavramına da bir göz kırpacağız.
BitArray sınıfı, adından da anlaşıldığı gibi bitlerden oluşan bir koleksiyondur. Bitler bilgisayar
dünyasının temelini oluşturduğu ve
bu bağlamda hayati bir önem taşıdığı için bir çok uygulamamızda kullanabileceğimiz çok faydalı bir sınıftır.
Birden fazla kurucusu mevcuttur isterseniz önce bunlara değinelim.
Constructors (Kurucular) |
Açıklama |
public BitArray(bool[]
bims) |
Burada boolean türündeki dizimiz aynen BitArray koleksiyonumuzun elemanları olur. |
public BitArray(byte[]
bims) |
Byte türünden dizimizin uzunluğunun 4 olduğunu varsayarsak bims[0] ilk 8 biti bims[1],bims[2] ve bims[3] sırasıyla diğer 8 bitleri temsil eder. Sonuç olarak 32 biti koleksiyonumuzda barındırmış oluruz.
|
public BitArray(int[]
bims) |
Aynen byte türünden dizi kabul eden
kurucumuzdaki gibi aynı mantıkla çalışır bims[0] ilk 32 biti ve sırasıyla diğer 32 bitlik gruplar koleksiyonumuzun elemanı
olarak karşımıza çıkar. |
public BitArray(int boyut) |
Burada direkt olarak sınıfımız içindeki bitlerin sayısını belirleyebiliriz.
Not: Ilk değer olarak false atandığını unutmamız gerekir. |
public BitArray(int
boyut,bool xyz) |
Burada ise direkt olarak boyutunu
verdiğimiz gibi ikinci parametre oalrak verdiğimiz bool türünden değişken sayesinde sınıfımıza ilk değeri otomatik değil bizim kontrolümüz altında istediğimiz seçenek atanır. True veya False. |
public BitArray(BitArray
bims) |
bims sınıfımızdaki bitler aynen yeni oluşturduğumuz sınıfta da kullanılacaktır. Unutulmaması gereken bir değer kopyalanması olduğu ve referanslarının aynı olmadığıdır. |
Kurucularımızı irdeledikten sonra bir uygulama için gerekli olan diğer silahlarımızı kuşanalım ve bunlarda bu sınıfa ait olan üyelerden metotlarımız olsun. Bildiğiniz gibi metotlar, kurucular, özellikler ve indeksleyiciler bir sınıfın vazgeçilmez araçlarıdır.
Yeni başlayanlar ve dah önceden C ile upraşanlar için Not: Metotların C deki
karşılığının Fonksiyon olduğunu belirtmeden geçemeyeceğim aşağıdaki metotları eğer C biliyorsanız fonksiyon mantığıyla düşünmeniz işlerinizi eminim çok rahatlatacak. Yeni bir kavram ve C nin NYP(Nesne Yönelimli Programlama (Ingilizce deyimiyle OOP)) eklenmiş hali olarak görmeniz bir adım daha ileri gitmemiz için bir avantaj kazandırır.
Metodlar |
Kısa Örnek |
Açıklama |
public BitArray
And(BitArray isim) |
BitArray sınıfında kadir1 kadir2 kadir3 olsun.
kadir3=kadir2.And(kadir3);
kadir2 ile kadir3 bitsel ve ye sokulup kadir3 e atanıyor. |
BitArray sınıfından isim
adlı nesnenin bitlerine ve bu metodun üstünden kullanılan nesnenin
bitlerine bitsel ve uygular ardından tekrar geri dönüş değeri olarak
kullanır. |
public BitArray Not() |
kadir3=kadir2.Not();
|
Fazla üstünde durmaya gerek yok sanırım. Üzerinden çağrılan BitArray sınıfını bitlerinin değilini alır ve geri dönüş değeri de bu sonuç içeren BitArray nesnesidir.
|
public BitArray
Or(BitArray isim) |
|
BitArray And() ten tek farkı bitsel ve yerine bitsel or yapmasıdır.
|
public BitArray
Xor(BitArray isim) |
|
Bu da bitsel Xor yapmaktadır kullanımı BitArray Or() veya And() ile aynıdır.
|
public bool Get(int
indeks)
public void Set(int indeks,bool abc) |
|
Indeksleyicilerden ve özelliklerde kullanılan get ve set den pek de bir farkı olduğu söylenemez. Get metotumuz BitArray sınıfındaki belirttiğimiz indeks deki biti döndürür. Set ise aynen dediğim gibi indeksini belirttiğimiz bite abc değerini koyar. |
Yeni Başlayanlara Için:
Makalemizde bahsedilen indeksleyicilerde veya özelliklerdeki Get ve Set in tanımı
şöyleydi; en basit tanımıyla get değer döndürür ve set değer atar. Tabi ki çok daha kullanışlı olduğunu belirtmek isterim kısa bir indeksleyici örneği verirsek:
dizi adında bir dizi tanımlandığı farzedilmiştir. value atanan değerdir.
public int this[indeks]
{
get{
return dizi[indeks];
};
set{ dizi[indeks]=value;
};
}
|
Özellikleri gösteren küçük bir örnek:
(deger isminde bir int tipinde alanımız olduğu farzedilmiştir.)
public int isim
{
get{
return deger;
}
set{
deger=value;
}
}
|
Indeksleyicilere ve özelliklere dair böyle bir noktada ufak bir örnek vermemenin tuzsuz bir çorba yapmaktan pek bir farkı olduğunu sanmıyorum.
Indeksleyiciler ve özellikler nesne yönelimli programlama mantığının temellerinden biridir öyle ki nesne üzerinden en azından bir diziye bizim verdiğimiz kurallara göre değer atamak ve değer okumak işi kolaylaştıran bir unsurdur en iyisi örneğimizi verelim. Bu aşamada eminim indeksleyicilerin kullanımı size bir çok
şey katacaktır. Örneğimiz:
using System;
using System.Text;
namespace indeksleyiciler
{
class Program
{
static void Main(string[] args)
{
indexersinifi ind=new indexersinifi(10);
Console.WriteLine("Özelliğimiz çalışıyor...");
Console.WriteLine("Dizinin Boyu"+ind.boyut);
Console.WriteLine("indeksleyici sayesinde sınıfımızın içindeki dizimiz doluyor...");
for(int i=0;i<10;++i)
ind[i]=(i+1)*2;
Console.WriteLine("Get Eden Bölüm Çalışıyor ve sonuçlar...");
for(int i=9;i>=0;--i)
Console.WriteLine("Dizinin "+i+". elemanı "+ind[i]);
}
}
class indexersinifi
{
int[] dizi;
public indexersinifi(int aa)
{
dizi = new int[aa];
}
public int this[int index]
{
get{
return dizi[index];
}
set{
dizi[index]=value;
}
}
public int boyut{
get{
return dizi.Length;
}
}
}
} |
Programımızın Çıktısı:
Metodlar |
Açıklama |
public void SetAll(bool
abc) |
BitArray sınıfının
içerdiği bütün bitlere abc değerini atar. Yukarıda anlatılan set
mantığının tek bir bite değil sahip olduğu bütün bitlerine uygulanmış
bir varyasyonudur. Bu sınıf içinde ayrıca bir indeksleyici ve bir
özellik tanımlıdır (Ingilizce karşılıkları indexer ve properties dir).
|
object this[int indeks] {
get; set; }
ve
public int Length { get; set; } |
Not: BitArray, ICollection IEnumerable uygular ve IClonable’ı destekler.
|
Arayüzlere bu makalemde değinmiyorum. Kısaca teknik özelliklerinden bahsedersek interface anahtar kelimesi ile belirtilir. Metot imzalarını
taşır ve sınıflar kalıtım yoluyla bir yada birden fazla arayüz alabilir. C# da eksik olan çoklu kalıtımın bir nevi değişik
şekillerden gerçekleştirilmesidir. Bu bilgiler ışığında oluşturulmuş olan C# örneğimiz:
using System;
using System.Collections;
class Program
{
static void Main(string[] args)
{
byte[] bKadir ={ 67 };
bool[] bKadir2={true,false,false,true,true,false,true,false};
BitArray BBitler1 = new BitArray(bKadir2);
BitArray BBitler2 = new BitArray(8, false);
BitArray BBitler3 = new BitArray(bKadir);
BBitler2 = BBitler2.Xor(BBitler3);
BBitler3=BBitler3.Or(BBitler1);
BitArray BBitler = new BitArray(BBitler2.Not());
//indeksleyicinin kullanımı
BBitler3[1] = false;
BBitler2.SetAll(true);
Console.WriteLine("BBitler in son degeri");
foreach (bool xyz in BBitler)
Console.Write(xyz + " ");
Console.WriteLine();
Console.WriteLine("BBitler1 in son degeri");
foreach (bool xyz in BBitler1)
Console.Write(xyz + " ");
Console.WriteLine();
Console.WriteLine("BBitler2 in son degeri");
foreach (bool xyz in BBitler2)
Console.Write(xyz + " ");
Console.WriteLine();
Console.WriteLine("BBitler3 in son degeri");
foreach (bool xyz in BBitler3)
Console.Write(xyz + " ");
Console.WriteLine();
Console.WriteLine("BBitler in uzunluğu "+BBitler.Length);
Console.WriteLine("BBitler1 in uzunluğu "+BBitler1.Length);
Console.WriteLine("BBitler2 in uzunluğu "+BBitler2.Length);
Console.WriteLine("BBitler3 in uzunluğu "+BBitler3.Length);
}
} |
Çıktımız ise şöyledir:
Başka bir uygulama olarak int[] dizisi ile bir BitArray sınıfı canlandıralım:
using System;
using System.Collections;
class Program
{
static void Main(string[] args)
{
int[] bKadir ={ 960167 };
BitArray BBitler1 = new BitArray(bKadir);
BitArray BBitler2=new BitArray(bKadir);
BBitler1.Not();
BBitler2.SetAll(true);
Console.WriteLine("BBitler1 in son degeri");
foreach (bool xyz in BBitler1)
Console.Write(xyz + " ");
Console.WriteLine();
Console.WriteLine("BBitler2 in son degeri");
foreach (bool xyz in BBitler2)
Console.Write(xyz + " ");
Console.WriteLine();
Console.WriteLine("BBitler1 in uzunluğu "+BBitler1.Length);
Console.WriteLine("BBitler2 in uzunluğu "+BBitler2.Length);
}
} |
Çıktımız ise şöyle:
Gördüğünüz gibi hemen hemen bütün metotları, indeksleyicileri ve özellikleri kullanarak kompleks bir BitArray sınıfı uygulaması yaptık. Kurucu metotların değişik varyasyonlarını da rahatlıkla deneyebilirsiniz. C#
ın ve Visual Studio.NET in .Net Framework gibi bir bileşenler yumağıyla oluşturduğu çıkış ve desteklediği geniş çaplı ve yapılabilir hemen hemen her
şey sayesinde uygulayabileceğiniz her türlü alt seviyeli programlama içinde uygun bir sınıf. Bana kalırsa robotik deneylerinin de bir nevi vazgeçilmezi.
Değişik kalıplar bulup BitArray dizisinin metotlarını kullanarak ilginç sonuçlar elde edebilirsiniz. C#
ın hissettiğine inanmıyorum yani şu intellisense olayına çünkü asıl hisseden sizlersiniz ve bu kalıpları bulup kullanırsanız
yapacağınız işlemler o kadar kompleks olacaktır. Unutmayın programlama dilleri ve bu yazıyı okuduğunuza göre C# sizin için ana diliniz gibi olmalıdır. 1 ve 0 mantığı her zaman işe yaramaktadır düşünsenize programcı mantığıyla
bir 0 dan 1 elde etmek isteseniz yapacağınız şey bir 0’ın içinde kaç tane 0 olduğunu saymaktır. O halde bu BitArray sınıfının önemini kavramak da bizim için zor olmasa gerek. Siz bir adım öne gidin ve çeşitli atraksiyonlarını uygulayın. Yaptığınız programları da mail adresime yollayabilirsiniz. Herhangi bir soru ve yorum için [email protected] adresinden bana ulaşabilirsiniz.
Yazan:
Volkan Atasever
[email protected]
Makale:
BitArray Sınıfı, Indeksleyiciler ve Özellikler C#, Visual C# ve .NET Volkan Atasever
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|