Sizin de farkında olduğunuz gibi, değişik yazılım dilleri, aynı yapıları farklı şekillerde ifade ederler. Örneğin iki string değerlerini birbirine eklemek için C# yazılım dilinde ( + ) kullanılırken aynı işlemi VB.NET te yapmak için ( & ) kullanmanız gerekmektedir. Bu değişiklikler sadece kullanılan sembollerle kalmamaktadır. Aynı metodun iki farklı dildeki temsili de çok farklı olabilir. Aşağıdaki örnekte bunu daha açık bir şekilde görebiliriz.
VB.NET
C#
Aradaki bu farklılıklar, herbir yazılım dilinin derleyicisi birbirine benzer kodlar oluşturduğu takdirde, .NET'in içerisindeki bu farklılıklar CLR açısından önemsenmez. Ne demek isteğimizi şöyle açıklayalım. Birbirine sonuç olarak benzeyen fakat farklı dillerde, farklı kurallara uyularak yazılan iki program veya kod parçası, benzer birer ortak dile tercüme edildikleri takdirde, sonuç olarak hangi dilde yazıldıklarının CLR için bir önemi kalmaz. Yalnız bunun gerçekleşebilmesi için .NET içerisindeki her dilin bazı kurallara uyması gerektiğini farketmek çok zor olmasa gerek.
Common Language Specification (CLS) , .NET içerisinde bulunan tüm dillerin ortak olarak CLR tarafından çalıştırılabilmesi için uyması gereken kurallardan oluşur. .NET platformuna uygun bir derleyici yazmak ve bu derleyicinin .NET içerisinde pürüzsüz olarak çalışmasını isterseniz, bu kurallara harfiyen uymanız gerekmektedir. Bu kuralların herbirinin kendine özgü ismi vardır ( örneğin "CLS Rule 6"). Bu kuralların kalbi ise Rule 1'dir.
-Rule 1: CLS kuralları sadece tanımlanmış oldukları assembly dışarısından görülebilen türler için geçerlidir.
Bu ilk kuraldan anlaşıldığı gibi, .NET türleri üretilirken nasıl çalışacaklarına yönelik olan mantığının kurulmasında ilk kuraldan başka herhangi bir CLS kuralı rol almaz. Bir türün CLS'e tek uyması gereken tarafları adlandırma gelenekleri, parametreleri ve geri çevireceği türler adına olan yönleridir.
Tabi ki CLS kuralları arasında, örneğin herhangi bir dilin string değerlerini nasıl temsil etmesi gerektiği, enumeration türlerinin kendi içlerinde verileri nasıl temsil etmesi gerektiği, static olarak tanımlanan bir değişkenin nasıl olması gerektiği gibi birçok kural vardır. Fakat diğer makalelerde de söylediğim gibi, bu detayları bilmesi şart olan kişiler sadece .NET Framework'ü için derleyici veya araçlar yazmayı amaçlayan kişilerdir. İyi bir yazılımcı olabilmek için bunları çok detaylı bir şekilde bilmek şart değildir.
VB.NET
Kod:
Public Sub Metodumuz()
'Yapılması gereken şeyler
End Sub
C#
Kod:
public **** Metodumuz()
{
//Yapılması gereken şeyler
}
Aradaki bu farklılıklar, herbir yazılım dilinin derleyicisi birbirine benzer kodlar oluşturduğu takdirde, .NET'in içerisindeki bu farklılıklar CLR açısından önemsenmez. Ne demek isteğimizi şöyle açıklayalım. Birbirine sonuç olarak benzeyen fakat farklı dillerde, farklı kurallara uyularak yazılan iki program veya kod parçası, benzer birer ortak dile tercüme edildikleri takdirde, sonuç olarak hangi dilde yazıldıklarının CLR için bir önemi kalmaz. Yalnız bunun gerçekleşebilmesi için .NET içerisindeki her dilin bazı kurallara uyması gerektiğini farketmek çok zor olmasa gerek.
Common Language Specification (CLS) , .NET içerisinde bulunan tüm dillerin ortak olarak CLR tarafından çalıştırılabilmesi için uyması gereken kurallardan oluşur. .NET platformuna uygun bir derleyici yazmak ve bu derleyicinin .NET içerisinde pürüzsüz olarak çalışmasını isterseniz, bu kurallara harfiyen uymanız gerekmektedir. Bu kuralların herbirinin kendine özgü ismi vardır ( örneğin "CLS Rule 6"). Bu kuralların kalbi ise Rule 1'dir.
-Rule 1: CLS kuralları sadece tanımlanmış oldukları assembly dışarısından görülebilen türler için geçerlidir.
Bu ilk kuraldan anlaşıldığı gibi, .NET türleri üretilirken nasıl çalışacaklarına yönelik olan mantığının kurulmasında ilk kuraldan başka herhangi bir CLS kuralı rol almaz. Bir türün CLS'e tek uyması gereken tarafları adlandırma gelenekleri, parametreleri ve geri çevireceği türler adına olan yönleridir.
Tabi ki CLS kuralları arasında, örneğin herhangi bir dilin string değerlerini nasıl temsil etmesi gerektiği, enumeration türlerinin kendi içlerinde verileri nasıl temsil etmesi gerektiği, static olarak tanımlanan bir değişkenin nasıl olması gerektiği gibi birçok kural vardır. Fakat diğer makalelerde de söylediğim gibi, bu detayları bilmesi şart olan kişiler sadece .NET Framework'ü için derleyici veya araçlar yazmayı amaçlayan kişilerdir. İyi bir yazılımcı olabilmek için bunları çok detaylı bir şekilde bilmek şart değildir.
