9.5 Metot Nasıl Bildirilir, Uygulanır, ve Çağrılır?
Şimdi, metotlar ile ilgili bildirim, uygulama (oluşturma), ve metotun çağrılması konularına açıklık getireceğiz. Metot bildirimi metotun programda kaydedilmesidir, böylece metot program tarafından bulunabilir. Metot uygulaması (yaratılması) belirli bir görevi yerine getirmek için kod yazma sürecidir. Bu kod metotun kendisidir ve onun mantığından oluşur. Metot çağrısı bildirilmiş bir metotun çözdüğü kod parçacığının çalıştırılması için verilir.
9.6 Metot Bildirimi
Metotun bildirimini nasıl ve nerede olmak üzere iki başlıkta inceleyeceğiz.
Sınıf bildirimini henüz açıklamamış olmamıza rağmen, daha önceki alıştırmalarda bunu görmüştük. Her sınıfın açılış ve kapanış parantezleri – "{" ve "}" arasında program kodu yerleştirilir. Bunun için daha ayrıntılı bir açıklama için bkz. "Sınıfları Tanımlama" Bölümü, ancak burada söz etmemizin nedeni sadece ve sadece bir sınıfın açılış ve kapanış parantezleri arasında– "{" ve "}" bir metotu bildirilebilmemizdir. Bir metot başka metot gövdesi içine gömülü olarak bulunamaz (bu daha sonra netlik kazanacaktır).
C# dilinde, bir metot sadece bir sınıfın açılış "{" ve kapanış "}" parantezleri içinde bildirilebilir.
Tipik bir metot örneği, daha önceden çokça yazılan Main(...) metotudur. Bu metot, sınıfımızın açılış ve kapanış parantezleri arasında muhakkak bildirilmelidir. Buna bir örnek aşağıda verilmiştir:
HelloCSharp.cs
public class HelloCSharp
{ // Opening brace of the class
// Declaring our method between the class' body braces
static void Main(string[] args)
{
Console.WriteLine("Merhaba C#!");
}
} // Closing brace of the class
9.6.2 Metot Bildirimi
Metot bildirimi metodun programda kaydedilmesini sağlar. C# dilinde biçimlendirmesi şöyle tanımlıdır:
[static] ([
])
Metot bildirmenin zorunlu unsurları vardır:
Metot tarafından döndürülen sonuç türü, - .
Metot adı - .
Metot parametrelerinin listesi - - boş liste olabilir veya parametrelerin bildirimleri bir dizi oluşturabilir.
Önceki blokta gösterilen HelloCSharp örneğinin Main(...) metotunda döndürülen değerin türüvoid olarak bildirilmiştir (yani bu metot bir sonuç döndürmez), metot adı Main olarak belirlidir, yuvarlak parantezlerin içinde metot parametrelerinin bir listesi bulunmaktadır. Verilen örnekte sadece bir parametre - string[] args dizisi vardır. Metot elemanlarının dizilişi önceden tanımlıdır. Her zaman, ilk olarak, metotun döndürdüğü değer türü yazılır. Ardından metot adı ve sonunda "(" ve ")" - yuvarlak parantez arasındaki parametrelerin listesi yazılır. Bildirimlerde isteğe bağlı olarak (public ve static gibi) erişim değiştiricileri olabilir.
Bildirilen bir metot için elemanların tanım sırasını tutun. İlk değer metotun döndürdüğü değer türüdür, daha sonra metotun adı gelir, ve sonunda yuvarlak parantez içinde yerleştirilen parametrelerin bir listesi gelir.
Parametre listesi void (boş) olarak verilebilir. Bu durumda yapmamız gereken tek şey metot adından sonra “()” yazmaktır. Metot parametreleri boş olmasına rağmen metot adını takiben yuvarlak parantezlerin izlemesi gerekir.
Parametreler boş olsun yada olmasın, metot adını takiben yuvarlak parantezler – "(" ve ")", her zaman yazılmalıdır.
Şimdilik dikkatimizi için odaklamayacağız. Şimdilik hiçbir şey döndürmeyen void kullanacağız. Daha sonra, dönüş türünün değiştirilmesini öğreneceğiz. Biçimlendirmede geçen static anahtar kelimesi zorunlu değildir, ancak küçük ve basit programlarda kullanılmalıdır. Bu bölümde daha sonra açıklanacak özel bir amacı vardır. Şimdilik örnek olarak kullanacağımız metotlar, bildirimlerinde static anahtar kelimesini kullanmaktadır. Statik olarak bildirilmeyen metotlar hakkında daha fazla bilgi için bkz. "Sınıfları Tanımlama" Bölümü, "Statik Üyeler" Bölüm Başlığı.
9.6.3 Metot İmzası
Metot bildirimini takiben gözden geçirmemiz gereken temel unsurlara geçmeden önce daha önemli bir şeye dikkat etmemiz gerekmektedir. Nesne yönelimli programlamada metot bildirimi metot adı ve parametre listesi tarafından tanımlanır. Bu iki eleman çifti metot özelliklerini tanımlar (genellikle metot imzası olarak adlandırılır). C#, nesne yönelimli programlama için kullanılan bir dil olarak, metot imzalarını - metotun adı ve parametre listesi - ile ayırt etmektedir. Burada döndürülen değer türünün metot imzasının bir parçası değil, sadece belirtiminin bir parçası olduğunu belirtmeliyiz.
Metot imzası ile tanımlıdır. Döndürülen tür metot imzasının parçası değildir. Bunun nedeni iki metot sadece dönüş değeri türlerine göre birbirlerinden farklıysa, bunların hangisinin program tarafından çağrılacağı yeterince açık değildir.
Döndürülen değerin türünün neden metot imzasının bir parçası olmadığına dair daha ayrıntılı bir açıklamayı bu bölümde daha sonra bulacaksınız.
9.6.4 Metot Adları
Her metot programın çözdüğü bütün sorun içinde belirli bir görevi çözer. Metot çağrıldığında metotun adı kullanılır. Belirli bir metot çağrıldığı zaman metot adı yazılır ve gerekiyorsa parametre değerleri geçirilir.
Aşağıdaki örnekte, metotumuzun adı PrintLogo olarak verilmiştir:
static void PrintLogo()
{
Console.WriteLine("Microsoft");
Console.WriteLine("www.microsoft.com");
}
9.6.5 Metot Adlandırma Kuralları
Bir metotu bildirirken, Microsoft tarafından önerilen adlandırma kurallarını takip etmeniz tavsiye edilir:
Bir metotun adı büyük harfle başlamalıdır.
PascalCase kuralının uygulanması gerekir, metot adını oluşturan bitişik her yeni sözcüğün ilk harfi büyük harfle başlamalıdır.
Metot adının fiil, yada fiil ve addan oluşması önerilir.
Bu kuralların zorunlu değil, ancak tavsiye edildiğini unutmayın. C# kodumuzla, dünyanın her yerinde iyi programcıların stilini takip etmek amacımız ise Microsoft'un kod kurallarını kullanmanız gerekir. Metot adlandırması hakkında daha ayrıntılı öneriler için bkz. "Yüksek Kalite Pogramlama Kodu" Bölümü ve "Metotların Adlandırılması" Bölüm Başlığı. İyi adlandırılmış metotlar için işte bazı örnekler:
Print
GetName
PlayMusic
SetUserName
Ve kötü adlandırılmış yöntemler için bazı örnekler:
Abc11
Yellow___Black
foo
_Bar
Metot adının metotun amacını açıklıyor olması çok önemlidir. Bu fikrin arkasında programımıza aşina olmayan bir kişinin metot adını okuduğunda, kolayca, metotun kaynak koduna bakmasına gerek kalmadan bu metotun neyaptığını anlayabiliyor olması yatmaktadır.
Bir metotu adlandırırken bu kuralları takip etmek iyidir:
Metot adı metot amacını açıklayıcı olmalıdır.
Metot adı büyük harfle başlamalıdır.
PascalCase kuralı uygulanmalıdır.
Metot adı fiil, yada fiil ve addan oluşmalıdır.
9.6.6 Değiştiriciler
Bir değiştirici belirli bir kod için derleyiciye ek bilgi veren C# anahtar kelimesidir. Zaten bazı değiştiricileri görmüştük: public ve static. Şimdi değiştiricilerin aslında ne olduklarını kısaca anlatacağız. Daha sonra ayrıntılı açıklaması için bkz. "Sınıfları Tanımlama" Bölümü, "Erişim Değiştiricileri" Bölüm Başlığı. Bir örnek vererek başlayalım:
public static void PrintLogo()
{
Console.WriteLine("Microsoft");
Console.WriteLine("www.microsoft.com");
}
Bu örnekte public değiştiricisi tarafından genel bir yöntem tanımlıyoruz. Bu, erişim değiştiricisi olarak da adlandırılan, özel tipte bir değiştiricidir ve bu metotun herhangi bir C# sınıfı tarafından, nerede olduğu önemli olmaksızın, çağrılabilir olduğunu göstermek için kullanılır. Public değiştiricileri “kim” onları arayabilir anlamında sınırlı değildir. Erişim değiştiricisi için başka bir örnek private değiştiricisidir. Onun işlevi public’in tam karşıtıdır, yani eğer, bir metot private erişim değiştiricisi tarafından bildirilmişse, bildirildiği sınıf dışında herhangi bir yerden çağrılamaz. Bir metot herhangi bir erişim değiştiricisiolmadan (public yada private) bildirilmiş ise, mevcut derleme içindeki tüm sınıflar tarafından erişilebilir, ancak diğer derlemeler için erişilebilir değildir (örneğin diğer Visual Studio projelerinden diyelim). Aynı nedenle, bu bölümde olduğu gibi küçük programlar yazarken, erişim değiştiricilerini belirtmeyeceğiz. Şimdilik, öğrenilmesi gereken tek şey metot bildiriminde birden fazla erişim değiştirici olamaz. Bir metotun bildiriminde static anahtar kelimesi varsa, bu metota statik denir. Statik metotu çağırmak için statik metotun bildirildiği sınıfın bir örneğinin olmasına gerek yoktur. Şimdilik okuyucu metotların statik olması gerektiğini kabul edebilir. Statik olmayan metotlarla başa çıkmayı açıklamak için bkz. Sınıfları Tanımlama" Bölümü, "Metotlar" Bölüm Başlığı.