5 Şub 2016

C#'ta ListView Kullanımı


ListView, ListBox'a benzer olsa da onun biraz gelişmiş hali olarak nitelendirilebilir. ListView'un özellikleri Form tasarımında ya da kod ile düzenlenebilir.

4 Şub 2016

C#'ta Try-Catch Kullanımı

Try-Catch yapısı, programımızın herhangi bir durumda bir hata ile karşılaşması durumunda, çalışmayı durdurmak yerine hata ile karşılaşıldığını, hatanın adını,tipini söylemesi istenen durumlarda kullanılır.
try scope'una çalışmasını istediğimiz kod parçası yazılırken, catch scope'una ise try kodunda hata olursa çalışması istenen kodlar yazılır.

C#'ta Timer Kullanımı ve Klavyeden Basılan Tuş Kontrolü




Windows Form uygulaması yaparken Toolbox'ımızda gördüğümüz araçlardan biri de Timer'dır. Bu yazımda Timer hakkında kendi bilgilerimi paylaşacağım.

3 Şub 2016

C#'ta BOM Oyunu Nasıl Yapılır?


Bu oyunda, kullanıcı konsol uygulamasına öncelikle bir bom sayısı girmektedir. Bundan sonra bilgisayar oyuna 1 sayısını ekrana yazdırarak başlamaktadır. Artık kullanıcı ve bilgisayar sırası ile 1'den 100'e kadar olan sayıları bilgisayara girmelidir. Fakat başta girilen BOM sayısının katlarına gelindiğinde bilgisayar ve kullanıcı ekrana o sayıyı değil sadece BOM ya da bom yazısını yazmalıdır. Eğer yazmazlarsa oyunu kaybetmiş demektirler.

2 Şub 2016

C#''ta Labirent Oyunu Nasıl Yapılır?


Bu oyunda mouse imlecimizi kırmızı engelleri aşmaycak şekilde Bitiş yazısına ulaştırmaya çalışıyoruz. Eğer imleç bu kırmızı engelleri aşarsa yeniden başlangıç noktasına dönmektedir.
Bunu sağlamak için lblBasla.Location'u kullanarak bunu bir Point nesnesine atadım ve her defasında buraya dönmesini sağladım. Oyun bittiği zaman program bize tekrar oynamak isteyip istemediğimizi de sormaktadır. Kaynak dosya buradan indirilebilir. Ya da aşağıdaki kodları incelenebilir. Not: MouseEnter metodu Bitiş ve Başlangıç labelleri hariç tüm labellar işaretlenerek açılmıştır. Böylece aşağıdaki label18_MouseEnter metodu sadece label18 için değil tüm kırmızı engeller için geçerli olmuştur.

C#'ta At Yarışı Oyunu Nasıl Yapılır?


Uygulamamın form tasarımı için bir tane çim resmi, 2 tane at resmi ve 1 tane de finish çizgisi resmi buldum. Çim resmini Form'un BackGround Image'i olarak ayarladım. At ve Finish resimlerini ise pictureBox'ların içine attım ve bu pictureBox'ların isimlerini sırasıyla at1, at2 ve finish yaptım.

C#'ta Dinamik Buton Oluşturma

Genelde butonların form çalışır çalışmaz oluşmaları istenir. Bu durumlarda gerekli kod Form'un Load eventi içine yazılmalıdır. Önce Button class'ından bir nesne türetilir. Ardından bu nesnenin özelliklerine (property) gerekli değerler atanır.

1 Şub 2016

C#'ta Debug Klasörü İçindeki Dosyalar ve Kullanım Amaçları

Programı çalıştırmak için bin-> debug içindeki exe uzantılı dosya kullanılır. Pdb dosyaları programın hata ayıklama özelliği kullanabilmesi için gerekli bilgileri saklar. Vhost.exe ve manifest ile biten dosyalar da yine hata ayıklama işlerine yardımcı olması için üretilen dosyalardır. Bu dosyaların kullanılma amaçları;

C#'da Köstebek Yakalama Oyunu Nasıl Yapılır?


Oyunda dinamik olarak butonlar tanımlanarak, köstebeğin çıkabileceği butonlar oluşturuluyor. Ve puan 10, 15, 20, 30 ve 40 olduğunda seviye sürekli arttırılıyor. Seviye arttırmadan kasıt köstebeğin hızı artıyor ve köstebeği yakalama alanımız gittikçe büyüyor. Kırmızı butonlar köstebeği temsil ederken bunlara basınca puanımız artmaktadır. Gri butonlar ise puanımızı azaltmaktadır. Oyunun kodları ve ekran görüntüleri aşağıdaki gibidir.

28 Oca 2016

Visual Studio Designer.cs Yapısı ve Event Kavramı

Visual Studio, biz formun özelliklerini(text, name vs.) değiştirdikçe ve forma bileşen ekleme, çıkarma yaptıkça Designer.cs'de ki koda müdahale ediyor.(Visual Studio'nun ilk yıllarında designer dosyası buradaki gibi ayrı bir dosya değil Form1.cs içerisinde bulunuyormuş. Karmaşa ve kod kalabalığına engel olmak için bu yöntem benimsenmiş.) Böylece Visual Studio'nun oluşturduğu kod ile kendi yazdığımız kod karışmıyor.

27 Oca 2016

C#'ta Static Sınıfı

Bir değişken, özellik veya metodun sadece alınan kopyanın değil de bütün o oluşturulan tipin olması istenilen durumlarda tanımlama static ifadesi ile yapılarak bu sağlanabilir. Alınan kopyadan kasıt sınıf adı kullanılarak türetilen nesne'dir. Örnek:

Sınıf Yokedici (Destructor)

Destructor metotların özel bir yazım şekli bulunmaktadır;
public class Sinif
        {
            ~Sinif()
            {
                Console.WriteLine("Sinif yok edildi");
            }
        }
Her sınıf için 1 tane Destructor olabilir ve sınıf adından üretilen o kopya yok edildiğinde çalışır. private, public gibi erişim hakları verilmez. Ayrıca destructor'ler parametre de almaz. Kod için çağrılmaz, otomatik olarak çalışırlar.

Nesne Kurucusu (Constructor)

Sinif nesne = new Sinif();
Yukarıda Sinif adlı class'ı kullanarak nesne adlı bir nesne türettik. Bu kod satırı okunduğu anda eğer Sinif adlı class'ın içinde bir nesne kurucusu varsa o hiçbir komut beklemeden çalışacak ve içerisindeki işlemler yapılmaya başlanacaktır.

Sınıf Özellikleri (GET-SET Kullanımı)

Bir sınıfın içinde 3 farklı özellik tanımlanabilir. Bunu aşağıdaki örnek ile açıklayabiliriz;
public class AA
        {
            public int x;
            public int y { get; set; }
            private int _z;
            public int z
            {
                get
                {
                    return _z;
                }
                set
                {
                    _z = value;
                }
            }
        }

26 Oca 2016

Değişkenlerin Yaşam Döngüsü ve Class Kullanımı

C#'ta tanımladığınız herşey object sınıfından türer. int türündeki bir değişkeni aşağıdaki gibi de tanımlayabilirsiniz hatta böyle tanımlamasanız bile C# derleyicisi sizin için aşağıdaki kodu çalıştırır;
int x = new int();

C#'ta Constantlar(Sabitler)

Constant ifadeler değeri hiç değişmeyecek sabitler tanımlamak için kullanılır. Tanımlama şekli aşağıdaki gibidir;
const int TIMER_INTERVAL = 1000;
const string CONNECTION_STRING = "abc";
const char SPLIT_CHAR = '|';

C#'ta Metotlara Erişim

C#'ta tanımlanmış her sınıfa ve sınıf özelliklerine, diğer kodun içinde kullanılıp kullanılmayacağına göre erişim hakkı tanımlanabilir. Bu haklar;

  1. public: Sınıf veya sınıfın elemanına aynı assembly veya başka bir assembly'den erişilebilir
  2. internal: Sınıf veya sınıfın elemanına sadece aynı assembly içinde erişilebilir.
  3. private: Sınıf veya sınıfın elemanına sadece aynı sınıf içinden erişilebilir.
  4. protected: Sınıf veya sınıfın elemanına sadece aynı sınıf içinden ve bu sınıftan türemiş alt sınıflardan erişilebilir.

C#'ta Metot Overload, Opsiyonel Parametreler ve Params Kullanımı

Bir metodun proje içerisinde birden fazla kullanım şekli desteklemesi istenen durumlarda olabilir. Bu durumlarda overload'un yaşanmaması için metotlara gönderdiğimiz parametre sayılarının aynı olmamasına dikkat etmeliyiz. Yada metot veri tipini öncekinden farklı bir veri tipi olarak tanımlamalıyız.

25 Oca 2016

C#'ta REF ve OUT İfadeleri

Ana metot parçalandığında, ana metottaki değişkenlerin alt metotlarda aynen devam etmesi ve ana metoda dönüldüğünde değerlerini koruması istendiğinde ya da bir metottan birden fazla sonuç döndürmesi istendiğinde, ref ve out kullanılır.

Nesne Tabanlı Programlamaya Giriş - Metotlar ve Kullanım Şekilleri

1-Değer Döndürmeyen Metotlar
Bu tarz metotlar void olarak tanımlanır. Çağıran kişiye hiçbir değer göndermez. Sadece scope'lar arasında belirtilen işlem gerçekleşir. Parametre alabilir ya da almaz. Kullanım kalıbı;
void MetotIsmi(veriTipi1 parametre1, veriTipi2 parametre2,...)
{
    ifade;
}

22 Oca 2016

C#'ta Döngüler

1-For Döngüsü
for(başlangıç, koşul, iteratör)
{
            ifade;
}

Başlangıç yerine döngüde kullanılacak olan değişkenin başlangıç değeri yazılır. Genellikle bu değişken i olarak kullanılır ve döngünün içinde tanımlanır(int i).

21 Oca 2016

C#'da Koşul İfadeleri

? OPERATÖRÜ
? operatöründen sonraki ilk kısım koşul doğru olduğunda çalışacak kısımdır. 2. kısım ise koşul yanlış olduğunda çalışır. Hiçbir zaman ifadenin true ve false bölümleri aynı anda çalışmaz. İfade ya doğru ya yanlıştır.
string name = "Gökalp";
name = name.Length == 6 ? name + "Soyad" : name + "Soyad";
Console.WriteLine(name);

C#'da Operatörler

AÇIKLAMALAR(COMMENT)
C# içinde 2 tip açıklama yazım şekli vardır;
  • Tek satırlı açıklama yazmak için // kullanılır
  • Açıklama birden çok satıra yazılacak ise /* ve */ karakterleri içine yazılmalıdır.
  • Açıklamalar uygulamanın çalışmasını etkilemez çünkü derleme esnasında dikkate alınmaz. Genel amaç kod karmaşasını basitleştirmektir.

19 Oca 2016

C#'da String Metotlar ve Regular Expressions

String değişkenleri tek ve çok satırlı olarak 2 şekilde tanımlayabiliriz;
string tekSatir = "Bu tek satır string'e örnektir";
string cokSatir = @"Bu da
                  birden fazla satır
                  string'e örnektir";

String değişkenlerin içinde kullanabileceğimiz özel karakterler vardır. Başında ters kesme işareti “ \ “ olan bu işaretlere string-literal denir. Örnek:

C#'da Queue, Stack ve Set Kütüphaneleri

LINKEDLIST
LinkedList, birbirine bağlı birçok objeden oluşan, içerisinde ileri geri gezebildiğimiz, araya obje ekleyebildiğimiz bir kütüphanedir. Her elemanın birbirine sıra olarak bağlı olması mantığından türemiştir.
Eğer sıra ile ileri ve geri gezmek istediğimiz bir listeye ihtiyaç varsa, LinkedList kullanmamız gerekir. Bunun dışında performans düşüreceğinden standart kullanımda tavsiye edilmez.

C#'da Dictionary Kullanımı

Eğer elimizde anahtar ile tanımlayabileceğimiz bir liste varsa, bu liste elemanları içinde hızlı arama yapmak istiyorsak, dictionary kullanarak değerlere ulaşma performasını arttırabiliriz. Dictionary, her satırı içerisinde bir anahtar (key) ve bir de değer (value) içerir. Anahtarlar değerler ile birebir eşleşir ve bir dictionary içinde her anahtardan bir tane olabilir. List’ler gibi generic bir sınıftır. Aşağıdaki gibi 2 farklı şekilde tanımlanır;

C#'da GenericList (Liste) Kullanımı

  • List, generics tipinde bir C# özelliğidir. 
  • Listeler dinamik dizilerdir. Bir listeyi tanımlarken boyut bildirmemize gerek yoktur.
  • Listeler dizilerden daha yavaştır.
  • Aynı dizi üzerinde birçok işlem yapan, performans spesifik bir uygulama geliştirmiyor isek ve listelerin özellikleri bizim için kolaylık yaratacaksa List kullanabiliriz.
  • Bir liste aşağıdaki gibi tanımlanabilir. < > işaretlerinin arasına hangi veri tipi yazılırsa liste o tipte elemanları tutar.
List<string> arkadaslarim = new List<string>();
List<int>    sayiList = new List<int>();
  • Listenin hafızada ayıracağı yer de tanım sırasında verilebilir. Listelerin kapasite tanımları sadece performans amaçlı bir ön tanımdır. Aşılırsa hata vermez.
List<string> telefonNumaralari = new List<string>(5000); //kapasite belirtilmiş liste

C#'da Array Sınıfı


Diziler, aynı veri tipine ait birden çok elemanı tutmaya yarayan veri tipleridir. Dizileri belli bir kapasiteye sahip olacak şekilde tanımlarız. Daha sonra indeks numarasını vererek, diziyi tanımladığımız tipte elemanlar ekleyebiliriz.

C#'da DateTime Kullanımı

DateTime d1 = new DateTime(1993, 2,13);
Console.WriteLine(“Tarih1: {0}”, d1);        //13.02.1993 00:00:00
DateTime d2 = new DateTime(1993, 2, 13, 23, 36, 0);
Console.WriteLine(“Tarih2: {0}”, d2);        //13.02.1993 23:36:00
DateTime d3 = DateTime.Parse(“13.2.1993”);
Console.WriteLine(“Tarih3: {0}”, d3);        //13.02.1993 00:00:00

C#'da Veri Tipi Dönüşümleri

  • Byte türünde bir değişken, int türünde bir değişkene dönüştürülürken, byte'ın alabileceği değer aralıkları, int'dan küçük olduğu için C# derleyicisi bizim için gerekli dönüşümü kendisi yapar. Bu duruma belirsiz (implicit) dönüşüm denir.
  • Tam tersi bir durumda bizim yapmak zorunda olduğumuz dönüşümlere ise explicit dönüşüm denir.
  • Bunların yanı sıra Microsoft .Net'de parse yöntemi kullanılarak da veri tipi dönüşümü sağlanabilir.

18 Oca 2016

.NET Hakkında Temel Bilgiler

.NET Framework, bize sağladığı imkanlar ile bütün ortamlarda aynı yapıyı kullanarak kod geliştirmemizi sağlar. Alt seviye dillerden (Assembly, C, Fortran) farklı olarak, Windows ile bir ara katman aracılığıyla iletişim kurarak, bizi detaylarla uğraştırmadan, kabuk üzerinde geliştirme yapmamızı sağlar.(Daha hızlı ve hatasız geliştirme) .NET ile Windows üzerine ara katman olarak CLR gelir. Bu katman hata ayıklama, tip kontrolü, çalışma zamanı derleyicileri gibi kodun üzerinde çalışabileceği bir altyapı sunuyor. Framework’un dosya, kelime, güvenlik, ağ, eş zamanlı işlemler, diziler gibi kolaylık sağlayan altyapısı bir üst katmanda bizim kullanımımıza açılıyor. Bunları kullanarak geliştirilmiş veri ve XML altyapısı da bize sunuluyor.

C# 'da Veri Tipleri ve Değişken Tanımlama

Veri tipleri hafızada ekonomi yapmamızı sağlar. Aynı zamanda kategorizasyon ve kullanım kolaylığı da sağlamaktadır.
C#’ta değişken tanımlamak 3 şekilde gerçekleşir;
  • VeriTipi değişkenAdı; (Değişkeni tanımlar, fakat hiçbir değer vermez.)
  • VeriTipi değişkenAdı = new VeriTipi( ); (Değişkeni tanımlar ve o veri tipinden yeni bir kopya alır.)
  • VeriTipi değişkenAdı = Değer; (Değişkeni tanımlar ve ona bir değer atar.)

C#'da İlk Konsol Uygulamamız - "Merhaba Dünya"


Visual Studio'da İşe Yarar Bilgiler

Bu yazımda hem kendim için, hem de merak edenler için Visual Studio'da kod yazarken bize yardımcı olabilecek bilgilerden bahsedeceğim. Yeni bilgiler öğrendikçe de bu yazıyı güncelleyeceğim.

Kablosuz Yerel Ağ Güvenliği Nasıl Sağlanır?

Kablosuz ağda, ağ kartı, kablosuz modem veya rooter gibi donanımlar kullanılır. En temel güvenlik problemi verilerin havada transfer edilmesidir. Kablosuz ağlarda switch ya da hub kullanılırarak  fiziksel güvenlik sağlanabilir. Kablosuz ağlardaki güvenlik açıkları ağır salıdırılara neden olabilir. Kablosuz ağa giren saldırganlar ağdaki kullanıcıların yapabileceği herşeyi yapabilir. Bilgisayarlardaki dosyaları, dizinleri kopyalayabilir. Zararlı programları bilgisayara kurabilir. Tüm ağ trafiğini kaydedip inceleyebilir. Kablosuz ağı dışardıdan kullananlar sevis reddi atakları (ddos), spam yapmak gibi kanunsuz işler için ağı kullanabilir. 

Sayısal İmzanın Avantajları Nelerdir?

Sayısal imza uygulamasıyla;
  • İmzalanan verinin bütünlüğü sağlanır.
  • İmza atacak şahsın bu yetkiye sahip olup olmadığı sağlanır.
  • İmza atanın bu imzayı inkar edememesi sağlanır.
  • İmzaya ait zaman damgası olması sağlanır.
  • Hız ve verimlilik sağlanır.
  • Gizlilik sağlanır.

Mesaj Doğrulama ve Özetleme Fonksiyonları

Mesaj Doğrulama
Mesaj bütünlüğünün korunması e-ticaret uygulamalarında gizlilikten daha önde gelen bir husustur. Mesaj doğrulama şu kavramları içerir:
·         Mesaj bütünlüğünün korunması
·         Göndericiinin kimliğinin geçerliliği
·         Mesaj kaynağının kendisini inkar edememesi

Kripto Sistemler

     Anlaşılır bir mesajı anlaşılamaz şekile dönüştürme ve mesajı tekrar eski haline geri dönüştürme prensipleri ve yöntemlerini içeren bilim dalına kriptografi denir. Anlaşılabilir orjinal metin, açık metin (plaint text) olarak adlandırılırken, dönüştürülen metin ise şifreli metin (cipher text) olarak adlandırılır.
     Anlaşılır bir metni yerlerini değiştirme veya yerine koyma yöntemlerini kullanarak anlaşılmaz şekle dönüştürmek için kullanılan algoritmaya şifreleyici adı verilir. Sadece gönderici ve alıcının bildiği algoritma tarafından kullanılan kritik bilgiler ise Key(anahtar) olarak adlandırılır.

Ağ Servisleri (Protokoller) Nedir ve Nelerden Oluşurlar?

Ağ Servisleri

Bir servis karşı sistemde çalışan bir süreç olup ağ kullanıcısına bazı hizmetler sağlar. Servislere özel port ve soketler ile ulaşılır. Port sistemdeki sanal bir posta birimidir. Herbir servis için ayrı bir port numarası tasarlanır. Kullanıcı bir servise erişmek istediği zaman oturum katmanı bunun için doğru port numarasını sağlamaktan sorumludur.

FTP(File Transfer Protocol)
İnternet üzerinden dosya transferi sağlayan bir servistir. File Transfer Protocol bu amaçla kullanılan standart bir protokoldür. Kullanıdı port numarası 20,21’dir.