Eğer bu sırada C# için hazırlanmış Express Edition yerine Visual Studio kullanıyor olsaydım New Project diyalog kutusunda daha fazla seçenek olurdu. Çünkü Visual Studio ile C# uygulamalarından başka Visual Basic, C ve Web uygulamalarını geliştirmek mümkündür.
Madem daha önceki derslerde DOS penceresinde derlenip çalıştırılan C# programları hazırladık; kaldığımız yerden devam etme niyetine bir konsol uygulaması hazırlayalım. Bu amaçla New Project diyalog kutusunda Console Application şablonunu seçip Name kutusuna konsol uygulamasına vermek istediğim adı yazdım. Bu şablonu seçip OK düğmesini tıklarsanız aşağıdaki gibi bir Express Edition penceresi ile karşılaşırsınız.
Express Edition tarafından hazırlanan bu kodu incelerseniz size yabancı gelen fazla bir şeyin olmadığını fark edersiniz. Şimdiye kadar anlattıklarımıza ek olarak using deyimiyle System.Collections.Generic, System.Linq ve System.Text adlı namespace'lerdeki sınıflardan yararlanılmak istendiği işaret edilmiştir. Zaten daha önce verdiğimiz kısacık örneklerde bu namespace'lerdeki sınıflara gerek duymamıştık. New Project diyalog kutusunda uygulamaya vermiş olduğum ad aynı zamanda Namespace adı olarak kullanılmış. Devamında Program adında bir Class hazırlanmış. Başka bir deyişle Express Edition, kod dosyasının adını aynı zamanda Class adı olarak kullanmış. Tabii sizler bu Class'a yani sınıfa başka bir ad verebilirsiniz. Her C# uygulamasında Main() metodunun olması zorunlu olduğu için bu Class'ın sınırları içinde Main() metoduna yer verilmiş.
Bu şartlarda 'Proje1' adını verdiğim konsol uygulaması henüz kaydedilmiş değildir. Şimdi henüz herhangi bir değişiklik yapmadığımız bu konsol uygulamasını kaydedelim. Bu amaçla Express Edition'ın File menüsünden Save All komutunu verebilir veya Standard araç çubuğundaki Save All düğmesini tıklayabilirsiniz. File menüsünden Save All komutunu verdiğinizde ekrana aşağıda verdiğim Save Project diyalog kutusu gelir.
Her ne kadar projeyi veya konsol uygulamasını hazırlarken New Project diyalog kutusunda bir ad vermekle birlikte projeyi kaydederken bu adı değiştirme imkanımız var. Projeye vermek istediğiniz adı Name kutusuna, projenin kaydedileceği klasörü ise Location klasörüne yazmanız gerekir. Klasör adını doğrudan yazmak yerine Browse düğmesini tıklayıp mevcut klasörlerden birsini seçebilirsiniz.
Save Project diyalog kutusuna ayrıca Solution Name başlıklı bir metin kutusu bulunmaktadır. C# için hazırlanmış Express Edition veya Visual Studio sayesinde hazırlanan bir veya birden fazla proje bir araya getirilerek Solution hazırlanmaktadır. Başlangıçta proje adı ile proje grubu işlevi gören 'Solution' adının aynı olacağı varsayılmaktadır. Projenin kaydı sırasında hazırlanan dosya veya klasörleri sizlere göstermek için Solution'a farklı bir ad verdim.
Express Edition veya Visual Studio ile hazırlanan projelerin geçerli kullanıcıya ait 'Belgelerim' klasörünün altındaki 'Visual Studio 2008\Projects' klasörüne kaydedilmek istendiği varsayılmaktadır. Bu konsol uygulaması için Express Edition tarafından hazırlanan klasör ve dosyalara dikkatinizi çekmek için Location metin kutusunda 'C:\Projeler' yazdım.
C# projesi hazırlanırken belirtilen klasörün altında önce Solution ile aynı ada sahip bir klasör hazırlanıyor. Ardından Solution'a ait klasörün içinde proje için ayrı bir klasör hazırlanmaktadır. Çünkü Solution'lar çok sayıda projeye sahip olabilirler. Proje için hazırlanan klasör ve dosyaları aşağıda görebilirsiniz.
Bu ekran görüntüsünü incelerseniz Solution için hazırlanan klasörün içinde proje ile aynı ada sahip bir klasörün hazırlanıp projeye ait dosyaların bu klasöre yerleştirildiğini görebilirsiniz. Solution birden fazla projeden meydana gelmeyecekse Solution ile projeye ait dosyaların bir arada olmasını sağlayabilirsiniz.
Solution için ayrı bir klasör hazırlanmasını istemiyorsanız Save Project diyalog kutusundaki Create directory for solution onay kutusunu pasif duruma getirmelisiniz. Bu onay kutusunu pasif duruma getirdiğinizde Save Project diyalog kutusunda Solution'a ad veremezsiniz. Aşağıda verilen ekran görüntüsünü 'Create directory for solution' onay kutusunu pasif duruma getirip 'Proje1' adında bir konsol uygulaması hazırladıktan sonra aldım.
Eminim ki bu dersleri izleyenlerin çoğunluğu şimdiye kadar bilgisayarlarına Express Edition'ı kurdular ve bu metni okurken bir taraftan yukarıda yaptığım gibi kendileri de konsol uygulaması hazırladılar. Bu ekran görüntüsüne veya kendi hazırladığınız proje için hazırlanan klasöre bakarsanız Express Edition'ın konsol uygulaması için çok sayıda klasör ve dosyayı hazırladığını fark etmiş olmalısınız. Beni dinlerseniz şimdilik kafayı bu dosyaların işlevine takmayın.
C# için hazırlanmış Express Edition ile yukarıda anlatılan şekilde hazırlanan projeyi çalıştırırsanız projenin çalışması ile çalışmasının sona ermesi bir olur. Projenin veya konsol uygulamasının çalışmasının hemen sona ermesini engellemek için Program.cs dosyasındaki Main() metoduna aşağıdaki gibi 3 satır ekledim.
using System;
using System.Collections.Generic;
using System.Text;
namespace Proje1
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("
www.memikyanik.com"; System.Console.Write("Çıkmak için bir tuşa basın";
System.Console.ReadKey();
}
}
}
Bu satırlar Express Edition penceresinde Main() metodu ile sınırlanan bloğa yazılıp sonra da Debug menüsünden Start Debugging komutu verilir veya Standard araç çubuğundaki Start Debugging düğmesi tıklanırsa Express Edition otomatik olarak derleme yapıp EXE dosyayı hazırlayıp çalıştırır. Aşağıda verdiğim ekran görüntüsünü bu konsol uygulamasını Debug menüsündeki Start Debugging komutu ile çalıştırdıktan sonra aldım.
Express Edition tarafından hazırlanan EXE dosya projeye ait klasörün altındaki Bin klasörü içinde yer alan Debug klasörüne kaydedilir. Bu EXE dosyayı alıp .NET Framework kurulu başka bilgisayarda çalıştırabilirsiniz.
Fırsattan istifade hemen kısa bir reklam arası vereceğim: Daha önce Visual Studio veya Express Edition'ı temel alan programcılık kitabı incelemiş olanların malumu olduğu gibi dünyanın hiçbir yerinde hiç kimse Visual Studio veya Express Edition'ı böyle anlatmıyor. Hele hele biraz sonra anlatacaklarımı hiçbir kitabın başlangıç sayfalarında bulamazsınız. C# veya .NET uyumlu başka programlama dili hakkında kitap veya makale yazanlar burada anlattıklarımı bilmiyorlar mı? Bilmez olurlar mı? Mutlaka bilirler, belki de bazıları Memik YANIK'tan daha iyi biliyorlardır. O zaman neden anlatmazlar bunları? Nedeni çok basit: Onların Memik YANIK gibi ilk okumada anlaşılma gibi bir kaygıları yoktur. Tabii Memik YANIK ilk okumada mutlaka anlaşılacağım dediği için veya böyle bir tercihi olduğu için başka yazarların 10 sayfada anlattıklarını Memik YANIK en fazla 12 sayfada anlatır. Bu nedenledir ki bazıları her fırsatta 'Memik YANIK kitaplarını ekran görüntüleri ile doldurup şişiriyor' diye beni suçlarlar. Bu derslerde yer ve sayfa sorunu olmadığı için kitaplarda kullandığımda çok daha fazla ekran görüntüsüne yer verdim.
Express Edition tarafından hazırlanan SLN uzantılı dosya Solution dosyasıdır. Tekrar etmek gerekirse Solution'lar proje grubu gibi işlev görmekte ve birden fazla proje üzerinde çalışıldığı zaman kolaylıklar sağlamaktadır. Bu örnekte konsol uygulamamız bir projeden meydana geldiği için SLN uzantılı dosyayı şimdilik unutabiliriz.
Buradaki 'csproj' uzantılı dosya ise proje dosyasıdır. 'csproj' uzantılı proje dosyalarında projedeki form ve class'lar hakkında bilgi bulunmaktadır. Express Edition tarafından hazırlanan proje dosyasının içeriğini size göstermek için Not Defteri'nden yararlandım. XML formatındaki bu dosyaya ilgisiz kalabilirsiniz.
Konsol uygulaması için Express Edition tarafından hazırlanan SLN ve CSPROJ uzantılı dosyalarla ilgimizi şimdilik kopardıktan sonra geriye bir tek 'program.cs' dosyası kaldı. Şimdi 'Program.cs' dosyasını Not Defteri ile açıp içeriğini size göstereceğim.
Gördüğünüz gibi bu satırlar Express Edition penceresinde yazdıklarımızla aynıdır. Daha önceki C# sürümlerini ve Visual Studio 2003'ü kullananlar için söylemek gerekirse; Microsoft firması Visual Studio 2005 ve C# 2.0'dan itibaren C# projelerinde 'program.cs' adında bir dosya hazırlamaya başladı. Projeler bu dosyadan, başka bir deyişle bu dosyadaki Main() metodundan itibaren çalışmaktadır.
Konsol uygulamalarında başlangıçta kod içeren bir tek 'program.cs' dosyası olduğu için konsol uygulaması çalıştırıldığında işletilmesini istediğiniz satırları Main() metodunun içine yazabilirsiniz. Şimdi öyle bir ayarlama yapacağım ki bu konsol uygulaması çalıştırıldığı zaman ekrana bir pencerenin gelmesini sağlayacağım.
Bu kodu dikkatlice incelerseniz using deyimiyle System.Windows.Forms adlı Namespace'deki Class'lardan yararlanılmak istendiği belirtilmiş. Aynı satırı sizler yazmaya kalkışırsanız hata meydana gelir. Çünkü bu Namespace .NET Framework ile gelen System.Windows.Forms.dll adlı DLL dosyasında yer almaktadır. .NET Framework'e ait klasöre baktığınızda bu dosyayı görebilirsiniz.
Konsol uygulamaları dahilinde ekrana pencere getirmek için bu DLL dosyasının konsol uygulamasına dahil edilmesi gerekiyor. Başka bir deyişle Express Edition'ın bu referans hakkında bilgilendirilmesi gerekir. Bunun için Express Edition penceresi içinde yer alan Solution Explorer penceresinden yararlanıp Add Reference diyalog kutusunu ekrana getirip System.Windows.Forms.dll referansını uygulamaya dahil etmelisiniz.
Aşağıda verdiğim ekran görüntüsünü bu referans veya DLL dosyasını uygulamaya dahil ettikten sonra aldım. Her ne kadar burada referansın uygulamaya dahil edildiğinden söz edilse bile gerçek tam böyle değildir. Yapılan, Express Edition'ın dolayısıyla C# derleyicisinin bu referanstan yararlanılmak istendiği konusunda haberdar edilmesinden ibarettir.
Bu konuda daha sonra bilgi verileceği için bu örneği denemeyebilirsiniz. Konsol uygulamaları üzerinde fazla durmayacağım için referans nedir? gibi soruları atlıyorum. Yukarıda verdiğim konsol uygulaması çalıştırıldığı zaman önce bir DOS penceresi açılır. Ardından yaptığım hazırlıktan dolayı ekrana bir pencere gelir. Bu pencereyi kapattığınızda konsol uygulamasının çalışması sona erer ve DOS penceresi kapatılır.
Buna rağmen yukarıda verilen kodun üzerinde biraz duralım. Main() metoduna yazdığım bu satırların ilkinde 'Form1' adında ve System.Windows.Forms adlı Namespace'teki Form sınıfı tipinde bir değişken tanımlanmaktadır. Devamında new anahtar kelimesi ile Form sınıfının örneğini alıp(yani nesne hazırlayıp) referansını Form1 adını verdiğim değişkene aktardım. En son olarak bu Form nesnesini Application sınıfının Run() metoduna parametre olarak verdim. Dikkat ederseniz burada tanımladığım değişkene Form1 adını verdim. Yarın bir gün birisi çıkıp bu değişken adını yani Form1'i kendi namı hesabıma Register ettim derse gülüp geçin.
Windows Forms Uygulamaları Daha önceki derslerde söylendiği gibi konsol uygulamalarına çok az ihtiyaç duyacağınız için Express Edition ile hazırlanan konsol uygulamaları üzerinde fazla durmaya gerek duymadan Windows Forms denilen normal uygulamalara odaklanacağız. Bu nedenle yukarıda hazırladığım konsol uygulamasını kapatıp ekrana New Project diyalog kutusunu getirip Windows Application şablonunu seçtim.
C# için hazırlanan Express Edition ile hazırlanan projelerde New Project diyalog kutusunda projeye verilen ad sonradan değiştirilebilmektedir. Projeye vermek istediğim adı Name kutusuna yazıp OK düğmesini tıklayınca aşağıdaki gibi bir Visual C# 2005 Express Edition penceresi ile karşılaştım.
Windows Application şablonu ile hazırlanan projeye bir form dahil edilmekte ve bu formun görsel yapısı Express Edition penceresine gerilmektedir. Bu proje üzerinde herhangi bir değişiklik yapmadan Debug menüsündeki Start Debugging komutu ile çalıştırırsanız karşınıza bu form veya pencere gelir.
Bu formun üzerine hemen düğmeler, TextBox'lar veya ListBox'lar yerleştirmek yerine Windows Application şablonu ile hazırlanan projenin özelliklerine bakalım. Bu amaçla Solution Explorer penceresini açtım.
Express Edition ile C# projesi hazırlandığı zaman çok kullanılan bazı referanslar veya namespace ve sınıfları içeren DLL dosyaları projeye dahil edilmektedir. Hatırlarsanız yukarıdaki sayfalarda konsol uygulaması dahilinde ekrana form veya pencere getirmek için System.Windows.Forms'deki Form adlı sınıftan yararlanmıştık.
Üzerinde çalışılan projede .NET Framework ile gelen sınıflardan birisinden yararlanmak için o sınıfın yer aldığı Namespace'i içeren DLL dosyasının veya referansın projeye dahil edilmesi gerektiği için Solution Explorer penceresinden yararlanıp Add Reference diyalog kutusunu ekrana getirmiştik.
Benzer durum Express Edition ile hazırlanan Windows Forms uygulamaları için de geçerlidir. Visual C# 2008 Express Edition en çok gerek duyulan referansları projelere kendisi dahil ettiği için bir süre referanslar ile ilgilenilmeyebilir. Express Edition ile hazırlanan projelere dahil edilen referansları size göstermek için Solution Explorer penceresinde References seçeneğine ait artı( ) işaretini tıkladım.
Gördüğünüz gibi Express Edition tarafından 6 referans veya DLL dosyası Windows Forms uygulamalarına otomatik olarak dahil edilmektedir. Yararlanmak istediğiniz sınıf hangi DLL dosyası veya referansta yer alıyorsa o referansın Solution Explorer penceresinden yararlanılarak projeye dahil edilmesi gerekir. .NET Framework ile gelen herhangi bir sınıftan yararlanabilmek için referansın projeye dahil edilmesi yetmez ayrıca ilgili Namespace'in Imports deyimi ile koda dahil edilmesi gerekir.
Birçok yerli yabancı kaynakta bu altını çizdiğim paragrafın benzerini bulma ihtimali yüksektir. Bu paragrafta söylenenler yanlış olmasa bile eksiktir ve okurun konuyu en başından yanlış kavramasına neden olmaktadır. Gelin bu paragrafı yeniden yazalım. .NET Framework ile birlikte çok sayıda DLL dosyası gelmektedir ve dosyalar Windows'un kurulu olduğu klasörün altındaki Microsoft.NET\Framework klasörüne yerleştirilmektedir.
Daha önce söylendiği gibi bu DLL dosyalarında Namespace'ler bulunmaktadır. Örneğin System.Windows.Forms.dll adlı dosyada System.Windows.Forms adlı namespace yer almaktadır. Namespace'lerde ise Class'lar ve/veya yapılar bulunmaktadır. Uygulamanızda hangi Class'ı kullanmak istiyorsanız o Class'ın yer aldığı namespace'i içeren DLL dosyasını yani referansı Solution Explorer penceresinde listelemeniz gerekiyor. Bir referansı Solution Explorer penceresinde listelemek demek bir bakıma Visual Studio veya Express Edition'a 'bu referanstan yararlanmak istiyorum' demektir. Yoksa uygulamaya dahil edilen bir şey yok. Söz konusu DLL dosyası yerinde duruyor. Yararlanmak istediğiniz sınıfın yer aldığı Namespace'i içeren DLL dosyasını Solution Explorer penceresinde listeledikten sonra aşağıda verdiğim kodda olduğu gibi Class adından önce Namespace adını yazarak söz konusu namespace'teki istediğiniz gibi Class'tan yararlanabilirsiniz.
static void Main(string[] args)
{
System.Windows.Forms.Form Form1;
Form1 = new System.Windows.Forms.Form();
Form1.Text = "memikyanik.com";
System.Windows.Forms.Application.Run(Form1);
}
Her seferinde Class adından önce Namespace adını yazmak istemiyorsanız using deyimiyle söz konusu Namespace'teki Class'lardan yararlanmak istediğinizi Visual Studio veya Express Edition'a belirtebilirsiniz. Buradaki using deyimi DOS'un Path komutu ile benzer işleve sahiptir.
using System;
using System.Windows.Forms;
namespace Proje1
{
class Program
{
static void Main(string[] args)
{
Form Form1;
Form1 = new Form();
Form1.Text = "memikyanik.com";
Application.Run(Form1);
}
}
}
Üzerinde çalışılan Solution veya proje hakkında bilgi edinilmek istendiği zaman başvurulan Solution Explorer penceresini dikkatlice incelerseniz projedeki formla ilgili olarak 3 dosyanın hazırlanmış olduğunu görürsünüz. Burada dikkatinizi öncelikle 'Program.cs' dosyasına çekmek istiyorum. Daha önceki derslerden bildiğiniz gibi C# projelerinin başlangıç noktası Main() metodudur. Express Edition veya Visual Studio ile hazırlanan projelerde Main() metodu 'Program.cs' adlı kod dosyasında bulunduğu için bu dosya önemlidir.
Her ne kadar bu dosya önemlidir desem bile bu dosyaya kayıtsız kalıp usta işi programlar yazmak mümkündür. Ne ki işin geri planının anlaşılması için bu dosyanın üzerinde biraz durmak bir zorunluluk. Solution Explorer penceresinde 'Program.cs' dosyasını çift tıklarsanız bu kod dosyasının içeriği görüntülenir.
Express Edition tarafından hazırlanan bu kodu dikkatlice incelerseniz System, System.Collections.Generic ve System.Windows.Forms adlı 3 Namespace'deki sınıfların kullanılmak istendiği konusunda using deyimiyle ayarlama yapılmış olduğunu görebilirsiniz. Program.cs dosyasındaki diğer satırlar hakkında şimdi verilecek bilgilerin altyapısı olmadığı için üzerinde fazla durmayacağım. Buna rağmen şu satırı dikkatinize sunmak istiyorum.
Application.Run(new Form1());
Bu satırı daha önce görmüş olanlar şöyle bir açıklamayı okumuş olabilirler: 'Uygulama Run() metodu ile başlatılmaktadır'. Aslında bu tek cümlelik tanım yanlış değildir. Ne ki bu tanım, bu satırla nelerin yapıldığını, geri planda nelerin geliştiğini açıklamaya yetmiyor.
Konunun devamında anlatılacağı gibi Express Edition ile bir Windows Forms uygulaması hazırlandığında System.Windows.Forms adlı Namespace'teki Form adlı Class'ın mirasçısı 'Form1' adında bir Class hazırlanmaktadır. İşte bu satırda 'Form1' adlı Class'ın örneği alınıp Application nesnesinin Run() metoduna parametre olarak verilmektedir. Yeterince açık olmayan bu 2 cümlenin açıklamasını bir sonraki derse bırakıyorum.