Cumartesi, Kasım 24

Sql Server Clr Enabled

            Sql CLR üzerinden yazdığınız function'u kullanabilmeniz için öncelikle aşağıdaki kodu execute etmelisiniz. Ardından Function'u kullanabilirsiniz


sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

Çarşamba, Ekim 24

İngilizce Telaffuz Test Programı

     Arkadaşlar ingilizce telaffuzunuzu test edebileceğiniz basit bir uygulama; Örnek metni silip istediğiniz metni yazıyorsunuz ardında başla butonuna basıyorsunuz, sırasıyla kelimeleri okumaya başlıyorsunuz siz okudukça sizin telaffuzunuzu test ediyor ve algıladığı kelimeleri yeşil renge çeviriyor.
İndirmek isterseniz buradan indirebilirsiniz.

Pazar, Ekim 21

C# ManagementClass Kullanımı

            ManagementClass kullanarak sistemdeki tüm sınıfların içerisinde gezebilirsiniz. Windows Form projesi olarak hazırladım Console ekranındada yapılabilir. ListBox a aşağıdaki sınıf isimlerini yazıyorsunuz, her bilgisayarda farklıdır bende 810 tane var 9 tanesini sectim ve ListBox.SelectedItems ile path olarak secilen sınıfı veriyoruz.
           ManagementClass sınıfı için öncelikle projenize bu dll i eklemelisiniz.
           System.Management.dll
    
           ListBox a eklenecek sınıflar :
SystemBIO
SystemDevices
SystemDesktop
SystemUsers
UTCTime
Volume
Process
Processor
PhysicalMemoryLocation

Çarşamba, Ekim 17

C# Extension Method

     C# 3.0 ile gelen bir yenilik kullanımı çok basit, statik bir sınıf yazıp statik metodunu "this" anahtarıyla başka bir class'a, struck'a, interface'e, hatta enum'a bile yazabilirsiniz. Ayrıca interface'e yazdığınız bir extension method'a gövdede vermiş oluyorsunuz.  

namespace ExtensionMethod
{
    class Program
    {
        static void Main(string[] args)
        {

Pazartesi, Ekim 15

C# Database'den XML' E Veri Yazma

     C# Database'den XML'e Veri Yazma

     using System.Data.SqlClient; using System.Data; kütüphanelerini projemize ekledikten sonra veriyi sql den DataTable'a çekiyoruz. Başka bir veritabanı yapmanız gereken işlemler farklıdır.

            SqlConnection con = new SqlConnection("data source=.;initial catalog=test;integrated security=true");
            SqlCommand cmd = new SqlCommand("select * from ogrenciler", con);
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable("Ogrenciler");
            da.Fill(dt);

         //DataTable WriteXml ve WriteXmlSchema metodlarını kullanarak sql'deki tablolarımızı xml dosyasına aktarabiliriz.

           dt.WriteXml(@"c:\belgeler\kayit.xml");        //Kayıt Dosyası
           dt.WriteXmlSchema(@"c:\belgeler\kayit.xsd");  //Şema Dosyası..

Cuma, Ekim 12

C# Code Snippet Yazma

           C#, developer aşamasında developer a yardımcı olmak için kısayollar barındırır(snippet), biz varsayılan olarak gelen snippet lara ekleme yapabiliriz. İstersek bunu yapan editörleri kullanabiliriz, istersekte varolan sinippet sablonlarından yararlanabiliz. Biz örneğimizde varolan şablonları kullanacağız .

     1-Visual studio karşılama penceresinde üst menüden tools sekmesini açıyoruz ve "Code Snippets Manager" sekmesini seçiyoruz.
C# Code Snippet Yazma














Çarşamba, Ekim 10

Visual Studio Form Projesi

   Visual Studio da bir form projesi nasıl başlatılır bir örnek ugulama yazalım

1-Açılış ekranından New Project'i seçebilir yada "File > New > Project" seçip bir proje sayfası açıyoruz açılan sayfadan "Windows Form Aplication" secip projemize isim veriyoruz.















SQL DataReader Kullanımı

        Sql DataReader Kullanımı

        Veritabanındaki tabloları sorgulamak istersek DataReader kullanılabilir. Asağıdaki örnekte müşteri tablosundaki müşterileri DataReader ile çekelim.
           
            SqlConnection con = new SqlConnection("data source=.; integrated security=true; initial catalog=test");
            SqlCommand cmd = new SqlCommand("select * from personel", con);      
            SqlDataReader dr = cmd.ExecuteReader();   //Reader'ı Execute ediyoruz.
          
           //DataReader row'ları teker teker okuyor.
            while (dr.Read()) 
            {
                Console.WriteLine(dr["Id"]+" : "+dr["Ad"]);   //Ad  ve Id alıyoruz.             
            }
Sql datareader kullanımı

C# Dosya Okuma (StreamReader)

C# Dosya Okuma

               C# da dosya okumak için birçok yöntem vardır. Tekbir satır da, bir txt dosyasının içerisindeki yazıları ekrana yazdırmak istersek aşağıdaki kod türkçe karakter desteğiyle birlikte bizim için yeterli oluçaktır.
 
           Console.WriteLine(new StreamReader("c://belge.txt", Encoding.GetEncoding("iso-8859-9")).ReadLine());

         //Biraz karmaşık gelebilir, hemen detaylı bir şekilde açıklayalım .
         //System.IO;  Kütüphanesi altındaki sınıfları kullanıyoruz
         //Encoding sınıfı yardımıyla türkçe dil desteği veriyoruz.
            Encoding enc = Encoding.GetEncoding("iso-8859-9");

C# FileInfo Sınıfını Kullanmak

 FileInfo sınıfı kullanımı

            //File info sınıfını kullanarak dosya ile ilgili tüm bilgilere ulaşabiliriz.
            FileInfo fi = new FileInfo("c://ergin.txt");
            Console.WriteLine("Dosya Varmı                     :" + fi.Exists);
            Console.WriteLine("Oluşturma Tarihi                :" + fi.CreationTime);
            Console.WriteLine("Uzantı Dahil Tam ismi        :" + fi.FullName);
            Console.WriteLine("Dosya uzantısı                   :" + fi.Extension);
            Console.WriteLine("En son değişiklik tarihi       :" + fi.LastWriteTime);
            Console.WriteLine("Dosya boyutu (byte olarak):" + fi.Length);
            Console.ReadLine();
            //Birçok metodu daha var gerekli olursa kullanılabilir.
C# FileInfo sınıfı kullanımı
     

Salı, Ekim 9

C# Klasör Okuma (Directory)

        Directory sınıfının GetDirectories metodu belirttiğimiz dizindeki gizli yada açık tüm dosyaları bize bir dizi olarak dönücektir.
            string[] klasorler = Directory.GetDirectories("c://");

            //Dizinin içerisinde foreach ile dönersek tüm klasörlere ulaşabiliriz.
            foreach (var item in klasorler)
            {
                Console.WriteLine(item);
            }

C# String.Join ve String.Split methodları

            Strng sınıfının 2 faydalı method'u ile bir örnek çalışma yapalım. Bir email dizimiz olsun önce email dizimizi bir string'e çevirelim sonrada string değeri kriterimize uygun şekilde bir dizi haline getirelim.


            string[] dizi = { "ahmet@ates.com", "hakki@yavuz.com""mahmut@hotmail.com", "metin@hotmail.com" };
            StreamWriter sw = new StreamWriter(@"c:/belge.txt", false);
            string yeni = string.Join(";", dizi);  //Dizimizi ";" ile birleştiriyoruz..
            sw.WriteLine(yeni);
            sw.Close();

Perşembe, Ekim 4

SQL Yaş Hesaplama

         Arkadaslar sql de kullanıcıdan aldığınız doğum tarihi bilgisini yıl olarak gösterebilirsiniz. Aşağıdaki bir örnek farklı şekillerdede bu işlem yapılabilir.

      declare @Tarih datetime
      set @Tarih='1988.11.21'
      print (year(getdate())-year(@Tarih))

Sql yaş hesaplama

Pazartesi, Ekim 1

SQL Tabloya Trigger Yazma

      Trigger create, update, delete, insert işlemlerinden sonra yapılmasını istediğimiz işlerin bilgisini tutan ve tetiklendiğinde yapması gereken işleri sırayla yapan tetikleyicilerdir. Trigger lar tablolara veritabanına ve server a yazılabilir.
      Trigger yazarken önce trigger ismi ardından çalışmasını istediğimiz yer, sonrasında hangi işlem için çalışmasını istediğimizi belirtiyoruz ve begin end blogları içerisinde yapmasını istediğimiz işlemi yazıyoruz.
      Örnek olarak bir tabloya trigger yazalım ve yeni bir öğrenci eklendiğinde o öğrenci YedekOgrenci tablosunada eklensin :

Cuma, Eylül 28

SQL Store Procedure

         Store prosedur'ler karmaşık sorgularımız tek bir satırda güvenli bir şekilde çalıştırabilmemizi sağlayan yapılardır (Methodlar) diyebiliriz. Prosedurler parametre alabilirler ve içeride yazdığımız sorguyu çalıştırırlar, geriye bir değer return ederler, içerisinde birden fazla işlem yapıp birden fazla sorgu çalıştırabiliriz ve normalde yazdığımız sorgulardan daha hızlı çalışırlar nedeni ise daha önceden derlenmiş ve çalışmaya hazır hale getirilmiş olmalarıdır.
         Parametre alan ve aldığı parametlerleri bir tabloya insert eden bir prosedure yazmak istersek :

SQL Geçici tablo Oluşturma (Temptable-AdminTemptable)

      Sunucuya olan bağlantı açıkken geçici olarak oluşturulan ve uzerinde işlemler yapabileceğimiz tablolardır, normal tablolardan farklı değildirler, tek kullanıcıya ait bir id ile oluşturulurlar ve sadece o kullanıcı tarafından kullanıcı server a bağlı kaldığı sürece erişilebilirler. Create edilirken # isareti ile belirtilirler. Örnek:
     
        create table #TempleTableOrnek
        (
        Id int identity(1,1),
        Ad nvarchar(50),
        Soyad nvarchar(50)
        )

SQL View Oluşturma

       View olusturduğunuzda ornek aldığınız tablonun bir yedeği alınmaz aynı tabloyu referans alan sanal bir tablo oluşmuş olur, gercek tabloda yada view'de yapılan bir değişiklik gerçek değeride etkileyecektir. View ler güncel verilerin kısıtlı sekilde gosterilmesini istediğimiz durumlada çok faydalıdır çünkü asıl tabloda yapılan değişiklik view'ide etkiler ve view üzerindende güncel ve gerçek veriye ulaşmış oluruz

       Örnek olarak:  5 tabloyu join ile birleştirip bir view oluşturduğumuzda 5 tablodaki istediğimiz kolonların güncel verilerine bir view üzerinden ulaşabiliriz bu işlemi bir store procedure ile de yapabiliriz fakat view in kolonları arasındada seçim yapabilirsiniz

    - 2 ilişkili tabloyu birleştirip tek bir tablo sorgular gibi sorgulayalım.

Perşembe, Eylül 27

SQL Fonksiyonları ve Dönüş Değerleri

         Sql fonksiyonlarında bir kolondaki değerler hesaplanır ve geriye bir değer döndürülür. Transact-SQL programlama dilinde  kullanılan gruplama (aggregate) fonksiyonları sunlardır:        

        Gruplama Fonksiyonları

  • AVG()       --Ortalama değer döndürür
  • COUNT()  --Satır sayısını döndürür
  • FIRST()    --İlk değeri döndürür
  • LAST()     --Son değeri döndürür
  • MAX()      --En büyük değeri döndürür
  • MIN()       --En küçük değeri döndürür
  • SUM()      --Ortalama değeri döndürür
      

Çarşamba, Eylül 26

SQL Join işlemleri

       Join işlemi tabloları birleştirmemizi sağlar ve sorgulama sonucunda yeni bir tablo oluşturulmaz, sadece birbirleriyle ilişkili tabloların birleştirilmiş halleri gosterilir. 
      Birincil anahtar her satır için benzersiz bir değer içeren bir sütun (veya sütunlar kombinasyonu) 'dir. Her birincil anahtar değeri tablo içinde benzersiz olmalıdır. Amaç, her tabloda verilerin tekrarlanmamasıdır ve tablolar arası ilişki kurulmasıdır. Çeşitli join teknikleri vardır.
  1. Inner join   --Her tablodaki karşılığı olan kayıtlar gosterilecektir.
  2. Left join     --Left ifadesinin solunda kalan tablodaki tüm veriler sağdaki tabloya bakılmaksızın gelicektir.
  3. Right join   --Left'in tam tersi
  4. Cross join  --Once yazılan tablodaki tüm elemanları diğer tablodakilerle eşleştirir.
  5. Full join      --Tablolardaki kayıtların tümünü karşılıkları olmasada getirir.
       Select Tablo1Ad,Tablo2Ad from Tablo1
       Inner join Tablo2
       on Tablo1.Id=Tablo2.Tablo1Id

     --"On" kısmında 2 tablonun nereden bağlanıcağını belirtiyoruz.

SQL Nedir?

            SQL (Structured Query Language) anlamına gelir. SQL bir veri tabanı ile iletişim kurmak için kullanılır. ANSI (Amerikan Ulusal Standartlar Enstitüsü)e göre, ilişkisel veritabanı yönetim sistemleri için standart bir dildir.
           SQL ifadeleri bir veritabanı güncelleme, görevleri gerçekleştirmek veya bir veritabanından veri almak için kullanılır. SQL kullanan bazı yaygın ilişkisel veritabanı yönetim sistemleri:
  • Oracle
  • Sybase 
  • Microsoft SQL Server
  • Access
  • Ingres
vb çoğu veritabanı sistemleri, SQL kullanmalarına rağmen, bunların çoğu da genellikle sadece kendi sisteminde kullanılan kendi ek özel uzantıları var . Ancak, bu tür "Create", "Delete", "Update", "Insert", "Select" ve "Drop" gibi standart SQL komutları tüm veritabanları için kullanılabilir.

Pazartesi, Eylül 24

SQL Create Table

          Sql arayüzünü kullanarak tablo kolaylıkla tablo yapabilirsiniz, fakat kodla yapmanız gerekirse aşağıdaki kodu kullanabilirsiniz.

     CREATE TABLE Tablo_Adi
     (
      KolonAdi   Data_Tipi,
      KolonAdi   Data_Tipi,           --Bu şekilde tablo oluşturabilirsiniz.
      KolonAdi   Data_Tipi,
      ...
     )

Pazar, Eylül 23

SQL Store Procedure (Saklı Yordam)

           Store procedure ler iş mantığınızın yani hazırladığınız sorgunun daha hızlı ve verimli çalışmasını sağlarlar ve sql injection gibi dış tehditlere karşı güvenlidirler.

           CREATE PROC sp_test
           AS
           BEGIN
                     select * from AdventureWorks.Production.Product
           END

Cuma, Eylül 21

SQL Update, Delete (Güncelleme-Silme)

       Sql Update

          Sql de tablodaki verileri güncellemek için Update sorgusu(query)kullanılır, yaptığı aslında silme ve ekleme işlemidir fakat bu işlemi yaparken ID değişmez.

           UPDATE tablo_ismi
           SET kolon1=değer, kolon2=değer,..
           WHERE kolonadi=Değer         //Burada koşul belirtiyoruz...
    
            Bir örnek daha iyi anlamanızı sağlıcaktır, biraz karışık bir sorgu 

SQL Select, İnsert (Seçme - Ekleme)

      Sql Select

         Sql de bir tablodaki verileri getirmek için select sorgusu kullanılır, sonuçu bir sutun, bir satır yada bir tablo olarak döndürebilirsiniz.
        
          SELECT kolon_ismi FROM  tablo_ismi      
          SELECT        *         FROM  tablo_ismi 
                
            Üst select sorgusu sadece ismini yazdığımız kolonu getiricektir, fakat alttaki select sorgusu tüm tablodaki kolonları getiricektir.
    

C# Class vs Struct

       Class ve struct arasında değer tip referans tip ayrımı vardır. Class bildiğiniz gibi referans tipli fakat struct değer tiplidir, class ve struct .Net'teki 5 temel tipin 2 sidir. Bir örnekle kullanımını ve arasındaki farkı anlatmaya çalışalım. Struct class'dan biraz farklıdır ;
  • Struct' lar default constructor içeremez
  • Struct içerisinde Field'lar değer almadan metotlar kullanılamaz
  • Kalıtım yapılamaz fakat interfaceler implemente edilebilir.
    

Perşembe, Eylül 20

C# Çarpım Tablosu

         Console ekranında çarpım tablosu yapmak çok basit ama yeni başlayanlar için iyi bir iç içe for örneği.
        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            for (int i = 1; i < 11; i++)
                for (int a = 1; a < 11; a++)
                    Console.WriteLine("{0} X {1} = {2}", a, i, (a * i));
        }

C# Delegate - DynamicInvoke

      Delegelerin temsil (işaret) ettikleri metodları tek tek yada istediğimiz sırayla çalıştırmak istersek, DynamicInvoke metodunu kullanabiliriz, tabi önce metodları bir Delegate dizisine atmamız gerekiyor, sonrasında dizideki elemanları tek tek çalıştırabiliriz.


    delegate void Temsilci();
    class Program
    {
        static void Main(string[] args)
        {

Salı, Eylül 18

C# Matrix Programı

       Matrix filmlerinde gördüğünüz aşağıya doğru kayan yazı ve rakamlar dizisi c# console ekranında yapılıyor, kodlar aşağıda yapmanız gereken kodu debug ettikten sonra herhangi bir tuşa basmak.

namespace Matrix
{
    class Program
    {
        static Random r = new Random(); //Bu nesneyi ile rasgele sayilar ureticez
        static bool thistime = false;   //Bu kısımda stepler ayarlanıyor.
        static void Main(string[] args)
        {

C# Try-Catch-Finally (exception handling)

       Hata yönetimi sırasında Try-Catch-Finally kod buloğu kullanılır. Try kısmında hata olması muhtemel kodlar bulunmalıdır, catch bloğunda ise hata olması durumunda çalışmasını istediğiniz kodlar olmalı. Finally bloğu ise her halukârda çalışacak kodların bulunduğu bölümdür ve siz catch bloğunda return bile yapsanız finally bloğundaki kodlar çalıştırılacaktır.

C# Foreach

       Foreach ile dizilerin koleksiyonların ve hatta kendi tipinizin içinde gezebilirsiniz. Var tipi bütün tiplerin yerini tutabildiği için listenin içerisindeki her elemanı var tipinde bir değişkene attık.


Pazartesi, Eylül 17

C# String Kesme İşlemi - Substring

       String ifadeyi istediğimiz aralıkta kesebilirsiniz bunun için Substring methodunu kullanabilirsiniz. İsterseniz 2 parametre gönderip index aralığını belirtebilirsiniz, istersenizde başlamasını istediğiniz index numarasını verebilirsiniz.

    string metin = "Uzun metin";
    Console.WriteLine(metin.Substring (2,5));  //Bu satırda orta kısmı yazıcaktır.
    
    Console.WriteLine(metin.Substring (5));  //Burda ise 5.indexten başlıcak.
String Kesme - Substring

C# Char Diziyi String'e Çevirme

            char[] harfdizisi = new char[5];
            harfdizisi[0] = 'a';
            harfdizisi[1] = 'b';
            harfdizisi[2] = 'c';
            harfdizisi[3] = 'd';
            harfdizisi[4] = 'e';

            string metin = new string(harfdizisi);
            Console.WriteLine(metin);

Char Array To String

Pazar, Eylül 16

C# Hata Sınıfı Yazalım (Custom Exception)

     C# ta kendi fırlattığımız hataları kendi hata sınıfımızı yazarak yakalayabiliriz.İlk olarak Exception sınıfını kullanarak bir sınıf yazıyoruz(MyException) exception sınıfı'nın içindeki constructor'ları eziyoruz bu işlemi kısa yoldan yapabilmemiz mümkün "exc" harflerine basarsak "Exception" kod snippet'ına ulaşabiliriz. "Exception" seçip 2 defa  Tab tuşuna basarsak framework bizim için hata sınıfımızı kendi yazmış olucak.
     Not: Framework'un fırlattığı hata mesajlarını biz override edemeyiz sadece kendi hata mesajlarımızı yakalayıp "Message" property sini ezerek kendi hata mesajlarımızı dışarıdan gelen değere göre yazdırabiliriz.

Cumartesi, Eylül 15

Visual Studio 2012

     Visual Studio 2012, tüm dünyada işbirliği içinde çalışan bir mühendislik ekibi tarafından Visual Studio ile oluşturuldu. Visual Studio 2012 yazılım geliştiricilere ne gibi yenilikler sunuyor ana başlıklar halinde yazmaya calıştım.
  • Yeni bir görünüş ve dokunuş
  • Kullanımı kolaylaştırılmış menü ve kısayollar
  • Windows 8 e özel görsel araçlar
  • Web geliştirme yükseltildi (HTML5 ve CSS3 Tam destek)
  • Cloud özelliği
  • SharePoint eklentileri, geliştirmeleri
  • Esnek çevik işlemler, kesin ALM

.NET Framework

      .Net Famework,Microsoft tarafından geliştirilmiş bir uygulama geliştirme platformudur. Bu platformda web, windows, mobile, web servisleri gibi her türden uygulama desteklenmiş ve geliştirilen her türlü uygulamanın birbiriyle ve dış dünyadaki diğer uygulamalarla iletişim kurabilmesi için uygun alt yapı sağlanmıştır.
       .Net mimarisi, ortak bir yürütme ortamı , ortak bir değişken tür sistemi, ve bağlantılı kütüphanelerden oluşur ve programcılar için bir çok fonksiyon içerir. .Net Framework te kütüpaneler sınıflandırılmış ve programların işletim sistemleri ile uyumlu bir şekilde çalışması sağlanmıştır.
       Microsoft .NET Framework 4.5 RC versiyonunu buradan indirebilirsiniz.
       Visual Studio 2012 with MSDN buradan satın alabilirsiniz. İsterseniz  buradan 90 günlük deneme sürümünü indirebilirsiniz. 

Cuma, Eylül 14

Hello world

       Hepimizin C# Console ekranındaki ilk kodu budur sanırım,  üst kısımda yazı rengini değiştiren kod bulunuyor ConsoleColor.Green(Yeşil), alttaki kodsatırı ise ekrana bir yazı yazmak istediğimizde kullandığımız method (WriteLine). İlk kodunuz hayırlı olsun...

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Hello World");
        }
    }
}
Ekran cıktısı aşağıdadır.
Hello World

Perşembe, Eylül 13

C# For

           Bu konu hakkında çok uzun makaleler var ben kısaca kullanımını ve nerede, neden ihtiyaç duyacağımızdan bahsetmek istiyorum. For diğer döngülere benzer olarak bir true-false arar ve true bulduğu sürece döner.
    for (;2 < 10;)      //Bu döngü sonsuza kadar döner   
    {                          
    }
          2 sayısı 10 sayısından küçük olduğu için sürekli true üretilecektir, buda döngünün sürekli dönmesini sağlar biz bu 2 rakamıda bir değişkene atayarak müdahale edebiliriz.

     for (int i =0 ; i<10 ; i++)      //Bu döngü 10 tur döner
    {                          
    }
          Özetlemek gerekirse (int i=0) değişkeni tanımladığımız bölüm, (i<10) true-false kontrolünün yapıldığı bölüm, (i++) ise değerin her bir turda arttılırdığı bölümdür. Bir işi tekrarlı olarak yaptırmak ve dizilerin içerisinde gezmek için kullanılabilir. Foreach döngüsünden daha yavaş çalışır fakat kullanım yerleri farklılık.
         Bir örnek yaparak daha iyi kavramaya çalışalım.
         for (int i = 0; i < 10; i++)  // i değeri her turda 1 arttırılıyor.
            {
                Console.WriteLine("deneme");
            }       
C# For Döngüsü
          

Çarşamba, Eylül 12

C# Tür Dönüşümü

C# Tür Dönüşümü   C# da tür dönüşümü 2'ye ayrılır bilinçli tür dönüşümü ve bilinçsiz tür dönüşümü kullanım ayanları farklıdır. 2 farklı tipi işleme sokmak istediğimizde tür dönüşümleri gerekmektedir.
  •    Bilinçsiz Tür Dönüşümü

    Küçük tipin büyük tipe donşmesi durumuna bilinçsiz tür dönüşümü deniyor, bunun sebebi RAM uzerinde daha az yer kaplayan küçük boyutlu değişkenin büyük boyutlu değişken e donüştürülmek istenmesi.

namespace BilincsizTurDonusumu
{
    class Program
    {
        static void Main(string[] args)
        {
            byte kucuk = 250; // Bellekte 8 bit yer tutar
            ulong cokBuyuk = 1234567891123456; // Bellekte 64 bit yer tutar           
            cokBuyuk = kucuk; // Kucuk bir deger icin bellekte fazla yer ayırmış olduk bu yüzden bu tip donüşümlere bilinçsiz tür dönüşümü denir.
        }       
    }
}
  • Bilinçli Tür Dönüşümü

       Bu dönüşüm tipinde ise büyük türden kücük türe dönşümdür, ve mühtemel veri kaybını bilinçli olarak kabul ettiğimizi framework'e bildiririz." (dönüştürülecek hedef tür)değişken " seklinde tanımlarız.

namespace BilincsizTurDonusumu
{
    class Program
    {
        static void Main(string[] args)
        {
            int sayi = 45065431;  // Bellekte 32 bit yer kaplar
            byte kSayi = 15;  //Bellekte 8 bit yer kaplar

            kSayi = (byte)sayi; //sayının önüne parantez içinde dönüştürmek istediğimiz türü belirtmeliyiz, aksi halde derleme zamanı hatası alırız bu durumda veri kaybı kaçınılmaz byte tipi 0-255 arası değer barındırabilir ve kSayi değişkeninin aldığı değer 215 olacaktır.
            //Tür dönüşümüne izin verilmeyen bazı tiplerde ise Convert sınıfı kullanılabilir.             
            string yazi = "123456";
            int sayi = 12;
            sayi = Convert.ToInt32(yazi); //sayi değişkeni 123456 değerini aldı.           
        }       
    }
}

C# Methot'tan Geri Çok Değer Döndürme(Tuple)

namespace TupleKullanimi
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Dondur(15, "deneme", true));
        }
        static Tuple<int, string, bool> Dondur(int a, string b, bool c)
        {
            return Tuple.Create(a, b, c);
        }
    }
}
      Tuple sınıfını kullanarak bir methot'tan 1'den çok değer(8 ile sınırlandırılmış) döndürebiliriz.Yukarıdaki şekilde ekrana yazdırmak istersek ekran çıktısı aşağıdaki gibi olucaktır.
C# Ekran cıktısı






      Eger bir değişkene almak isterseniz.Var değiskeni gelen değerleri tutabiliyor, fakat ulaşmak istediğinizde her bir değişken için Item1, Item2, Item3 değerlerinin üzerinden ulaşmanız gerekicek bu da ufak bir dez avantaj oluyor.

var a= Dondur(15, "deneme", true);

Salı, Eylül 11

C# Operatörler

  • Atama Operatörü
  • Aritmetiksel Operatörler
  • Mantıksal Operatörler
  • Karşılaştırma Operatörleri
  • Bitsel Operatörler

1-Atama Operatörü

          = atama operatörüdür ve sağındaki değeri yada değişkeni solundaki değişkene atar referans tiplerde ise referansini atar.

2-Aritmetiksel Operatörler

          Matematikte kullandığımız operatörlerdir. Toplama(+), Çıkarma(-), Çarpma(*), Bölme(/), Mod Alma(%) ve pratik kullanım icin (++), (--) operatörleride değeri 1 arttırıp, 1 azaltır. 

3-Mantıksal Operatörler

      3 mantıksal operatör vardır. (&&)ve Bu operatör 2 sonuçta doğru ise true deger dondurur., (||)veya Bu operatör 2 sonuçtan biri doğru olsada true sonuç dondürür., (!)değil Bu operatör sonuç doğru değilse true sonuç döndürür.

4-Karşılaştırma Opetörraleri  

    < küçüktür, >büyüktür, <=küçük eşittir, >=büyük eşittir , ==eşittir,!= eşit değildir.

5-Bitsel Operatörler

      Bitsel operatörler ramde tutulan verinin bitleri üzerinde işlem yaparlar. (&)ve, (|)veya, (~)değil, (>>)sağa bit kaydırma, (<<)sola bit kaydırma şeklinde toplam 5 adettir.

C# Değişken Tanımlama

       Main methodunun icerisinde değişken tanımlanırken değişkenin tipi,adı ve ilk değeri verilmelidir. Class düzeyinde bir tanımlama yapılacaksa durum değişicektir.
 
<değişken-tipi><değişken-adı>=<ilk-değer>

int sayi = 2;

using System;
namespace DegiskenTanimlama
{
      class Program
      {
             static void Main(string[] args)
            {
                   int sayi =  2;     //Daha önce kullanılmamış bir isim verilmeli
                   Console.WriteLine(sayi);
            }
      }
 }

Console.WriteLine  --  Console ekranında cıktı alabilmemiz icin vardır.Kodumuzun ekran cıktısı
Console Ekran Cıktısı


Cuma, Ağustos 31

C# Türleri(Referans-Değer)

        C# ta veri türleri Reference(Referans) Ve Value(Değer) olarak 2 ye ayrılır

Reference Type(Başvuru türleri)
        Bu tipler Heap bolgesindeki değerlerin referansını tutar ve veriye stack bölgesinde bir işaret tutarlar.
  • Class (Sınıf)
  • Interface (Arabirim)
  • Delegate (Temsilci)
  • Dynamic (Dinamik)
  • Object (Nesne)
  • String (Dize)
Value Type(Değer türleri) 
    Bu tipler ise veriyi stack bölgesinde tutarlar.
  • Enum (Sabit)
  • Struct (Yapılar)
  • char
  • 15 değer tipi ek olarak ayrı bir makalede özellikleri ile asağıdadır.
c#veri-tipleri

C# Char

using System.Char; Namespace altındadır.
MaxValue = (char)0xffff
MinValue = '\0'
            En çok kullanılan methodları ve ekran cıktıları aşağıdadır.

char ch1 = '1';
String str = "test string";

Console.WriteLine(System.Char.GetNumericValue(ch1));  // Output: "1"
Console.WriteLine(Char.IsControl('\t'));                             // Output: "True"
Console.WriteLine(System.Char.IsDigit(ch1));                  // Output: "True"
Console.WriteLine(Char.IsLetter(','));                               // Output: "False"
Console.WriteLine(Char.IsLower('u'));                              // Output: "True"
Console.WriteLine(System.Char.IsNumber(ch1));             //Output True
Console.WriteLine(Char.IsPunctuation('.'));                       // Output: "True"
Console.WriteLine(Char.IsSeparator(str, 4));                     // Output: "True"
Console.WriteLine(Char.IsSymbol('+'));                            // Output: "True"
Console.WriteLine(Char.IsWhiteSpace(str, 4));                 // Output: "True"
Console.WriteLine(Char.Parse("S"));                               // Output: "S"
Console.WriteLine(Char.ToLower('M'));                            // Output: "m"
Console.WriteLine(System.Convert.ToString('x'));            // Output: "x"

Ekran çıktısı aşağıdadır.

Ekran Çıktısı

C# String Temizleme

      String ifadeyi temizlemek veya degistirmek icin kullanılan bir cok method vardır. Char sınıfı ile ilgili makalede methodlardan bahsedicem. Aşağıdaki kod string ifadeyi sayılardan temizliyor.

string isim = "Den6564eme";
string temiz = "";
for (int i = 0; i < isim.Length; i++)
{
        if (char.IsLetter(isim[i]) || char.IsWhiteSpace(isim[i]))
            temiz += isim[i];
}
Console.WriteLine(temiz);

Ekran çıktısı aşağıdadır.
String Temizleme

C# Faktoriyel Hesaplama

Faktöriyel nedir?

        Faktöriyel, matematikte sağına ünlem işareti konulmuş sayıya verilen isim, daha genel olan Gamma Fonksiyonu`nun tam sayılarla sınırlanmış özel bir durumudur. Faktöriyel fonksiyonu verilen pozitif tamsayının kendisinden önceki bütün tamsayılarla 1'e inilinceye kadar çarpılması sonucunda elde edilen çarpımı gösterir.

ulong sayi = ulong.Parse(Console.ReadLine());
ulong Sonuc = 1;
for (ulong i = sayi; i > 0; i--)
{
       Sonuc *= i;
}
Console.WriteLine(Sonuc);

Not : İşlem sınırı ulong tip'inin alabileceği değer uzunluğu ile sınırlıdır.

C# Int Ters Çevirme

          Bu işlemi string olarak kolaylıkla yapabilirdik fakar int a zorlanıyorsanız bu çözum olabilir.

int sayi = 123456; 
int Sonsayi = 0;
for (; ; )
{
      Sonsayi = sayi % 10;
      Console.Write(Sonsayi);
      sayi = sayi / 10;
      if (sayi <= 0)
            return;
}
Ekran cıktısı aşağıdaki gibi.
int ters çevirme

C# String Ters Çevirme

       String olarak aldığınız veriyi bir diziye atıp Array sınıfının Reverse method'u ile ters cevirebilirsiniz.

string deger = "deneme";
char[] dizi = deger.ToCharArray();
Array.Reverse(dizi);

Perşembe, Ağustos 30

C# Asal Sayı Bulucu

          Çok Basit bir yöntem ile asal sayıları (int MaxValue = 2.147.483.647 aşmayacak kadar küçük sayıları) bulabiliyoruz.Daha büyük olan asal sayılar icin ise long, ulong gibi büyük değişkenleri, Sonsuz sayılar içinse kendi tipinizi(Tabi ram sınırı var) yazabilirsiniz. 
 
int sayi = int.Parse(Console.ReadLine());  //Sayıyı Alıyoruz
bool Sonuc = false;

        if (sayi % 2 == 0)
             Console.WriteLine("Asal Sayı Değil");
        else
        {
              Sonuc = AsalSayiBul(sayi);    //Sayıyı Method'a Gonderiyoruz
              if (Sonuc == true)                   //Dönüş Tipi true ise Sonuç Asal Sayı
                 Console.WriteLine("Asal Sayı");
              else
                 Console.WriteLine("Asal Sayı Değil");
         }

static bool AsalSayiBul(int sayi)
{
    for (int i = 2; i < sayi; i++)
   {
           if (sayi % i == 0)
                    return false;
   }
   return true;
}

C# Mail Gönderme

      C# da mail gondermenin çeşitli yolları vardır. Ben bir yolunu sizlerle paylaşıyorum.

SmtpClient cli = new SmtpClient("smtp.gmail.com");
                  cli.Credentials = new NetworkCredential("MailAdresiniz@gmail.com", "Sifreniz");
                  cli.EnableSsl = true;
                  cli.Port = 587; 
MailMessage mail = new MailMessage();
                      mail.To.Add("MailAtilacakAdress");
                      mail.To.Add("MailAtilacakAdress");//  çoğaltılabilir
                      mail.From = new MailAddress("MailAdresiniz@gmail.com", "Baslık");
                      mail.Subject = "Konu"; 
                      mail.Attachments.Add(new Attachment("c:\\Dosya.rar"));
                      mail.Body = DateTime.Now.ToString() + "Metin";
cli.Send(mail);

     Not: isterseniz "cli.Send(mail)" kısmını try catch bloğuna alıp hata olma durumunu yakalarsınız.

Salı, Ağustos 28

C# Veri Tipleri

C# Veri Tipleri -->

C# Veri Tipleri

    Önceden Tanımlı toplam 15 veri tipi vardır. Işaretli (Signed) ve Işaretsiz(Unsigned) olarak 2 ye ayrılırlar. Tam liste ve özellikleri aşağıdadır.
  • Işaretli(Signed) ; 0 ve 0'dan büyük değer alan veri tipidir.
  • Işaretsiz(Unsigned) ; 0'dan küçük, 0 ve 0'dan büyük değer alan veri tipleridir.

Tam Sayı Tipleri

  • (sbyte) Kapsamı : -128'den 127
  • (byte) Kapsamı : 0'dan 255
  • (short) Kapsamı : -32.768'den 32.767
  • (ushort) Kapsamı : 0'dan 65.535
  • (int) Kapsamı : -2.147.483.648'den 2.147.483.647
  • (uint) Kapsamı : 0'dan 4.294.967.295
  • (long) Kapsamı : -9.223.372.036.854.775.808'den 9.223.372.036.854.775.808
  • (ulong) Kapsamı : 0'dan 18.446.744.073.709.551.615

Ondalık Sayı Tipleri

  • (float) Kapsamı : -3,40282e+038f'den 3,40282e+038f
  • (double) Kapsamı : -1,79769e+308'den 1,79769e+308
  • (decimal) Kapsamı : -79228....35m'den 79228162514264337593543950335m

Yazı Tipleri

  • (char) Kapsamı : U0000'den Uffff
  • (string) Kapsamı : Bellek ile sınırlı.
  • (object) Kapsamı : Herhangi bir veritipini tutabilir.

Tarih Tipi

  • (DateTime) Kapsamı : Tüm tarih türlerini tutabilir.

Boolean Tip

  • (bool) Kapsamı :True ya da False (Doğru Yanlış) Veri tutabilir.