Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

C#’ta :: Operatörü

Merhaba,

Bir programlama dilinin syntax yapısında keyword olmaksızın taşıdığı anlam çok daha fazlası olan ve bir işlev ortaya koyan sembollere operatör diyoruz. Haliyle ilgilendiğiniz programlama dilinin bir kod bloğuna baktığınız zaman belki %70’i okunabilir anahtar sözcük ve kelimelerden ibaretken, belki de %30’dan fazlası operatör ve sembollerden oluşmaktadır. O yüzden bir dilin tam anlamını ortaya koyabilmek için o dilin kullandığı tüm operatörlere hakimiyet oldukça önem arz etmektedir.

C# programlama dili, operatör açısından oldukça zengin bir yapıya sahiptir. Ve bu operatörlerin bir çoğu bilindik ve günlük hayatta kullanıma yatkın bir işlevselliğe sahipken, azınlık olan bir kısmı ise oldukça farklı ve uzak noktalarda varlığını hissettirmektedir. İşte bu yüzden bu içeriğimizde yapısal olarak çok nadir karşılaşılan bir operatör olan :: operatörü üzerine konuşuyor olacağız.

:: operatörü, bir proje içerisindeki isim olarak aynı ama fiziksel olarak farklı olan sınıfların birbirlerine karışmalarını engellemek için kullanılan bir operatördür.

Örnek olarak aşağıdaki kod bloğunu inceleyiniz.

class MyClass
{
    public void X() => Console.WriteLine("Global MyClass");
}
namespace Operator
{
    class Program
    {
        static void Main(string[] args)
        {
            global::MyClass m = new global::MyClass();
            MyClass m2 = new MyClass();
            m.X();
            m2.X();
            Console.Read();
        }
    }
    class MyClass
    {
        public void X() => Console.WriteLine("Local MyClass");
    }
}

Yukarıdaki kod bloğuna göz atarsanız eğer namespace dışındaki “MyClass” sınıfı global diye nitelendirebileceğimiz bir sınıftır. Nihayetinde bir namespace’e bağlı olmadığından dolayı ilgili proje içerisinde tüm noktalardan erişilebilir bir yapıya sahiptir.

namespace içerisindeki “MyClass” sınıfı ise local nitelendirilebilir bir sınıftır. Sadece “Operator” isimli namespace içerisinden erişilebilmektedir.

Bu iki sınıf isim olarak benzerdir ama fiziksel olarak ayrı yerlerde tanımlandıkları için alenen bir fiziksel çakışma söz konusu değildir. “Main” metodu içerisine göz atarsak eğer “global” komutu kullanılmıştır. Bu komut, global olarak tanımlanmış “MyClass” sınıfını temsil etmektedir. Bu şekilde iki benzer isimde olan sınıfın isimsel çakışmasını engellemiş bulunmaktayız.

C#'ta :: Operatörü

Bunun dışında farklı .dll dosyaları yahut kütüphanelerde bulunan benzer isimli sınıflar üzerinde de şu şekilde bir çalışma gerçekleştirebiliriz.

using Sql = System.Data.SqlClient;

namespace Operator
{
    class Program
    {
        static void Main(string[] args)
        {
            Sql::SqlConnection con = new Sql::SqlConnection();
            con.ConnectionString = "...";
            SqlConnection con2 = new SqlConnection();
            con2.BaglantiCumlesi = "...";
            Console.Read();
        }
    }
    class SqlConnection
    {
        public string BaglantiCumlesi { get; set; }
    }
}

Dikkat ederseniz “System.Data.SqlClient” kütüphanesindeki “SqlConnection” sınıfı ile “Operator” kütüphanesindeki “SqlConnection” birbirlerine benzer isimde sınıflar olabilirler. Lakin, yapısal olarak fiziksel boyutta farklı noktalarda bulundukları için “using Sql = System.Data.SqlClient” şeklinde extern alias tanımlamasında olduğu gibi “Sql” değişkeni ile “System.Data.SqlClient” kütüphanesinin içeriği temsil edilmektedir. Haliyle bu değişken :: operatörü aracılığıyla kullanılarak ilgili “SqlConnection” nesnesinin ilgili kütüphaneye ait olduğunu göstermektedir.

Anlayacağınız, projemizde aynı isimdeki sınıfların birbirlerini ezmesini engellemek ve teoride her iki sınıfa farklı isimler verilerek kullanılmasını :: operatörü sayesinde sağlamaktayız.

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. Fahri dedi ki:

    guzel anlatim tesekkurler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*