İlginizi Çekebilir
C# Override Örnekleri
C# interface nedir
  1. Ana Sayfa
  2. C#
  3. C# Interface Nedir?

C# Interface Nedir?

Nesne yönelimli programlama konuları içerisinde öğrenirken kafamın karıştığı ve bir o kadarda zevk aldığım konu olan interface (arayüz) kavramına bu içeriğimizde göz atacağız. 👀

C# Interface Nedir, C# Interface Örnekleri, özellikleri ve kullanım alanları gibi başlıklara yer vereceğim. Daha önce interface yapısına oldukça benzerlik gösteren fakat aralarında farklar bulunan Abstract Class konusunu anlatmıştım. Konuyu hatırlamıyorsanız ya da henüz abstract class konusu hakkında bir fikriniz yoksa “C# Abstract Class Nedir” isimli rehber içeriğime emrecelen.com.tr/c-sharp-abstract-class-nedir/ bu bağlantıyı takip ederek ulaşabilirsiniz.

C# Interface Nedir?

C# Interface, yapısı gereği diğer sınıflara yol gösterici, rehberlik yapmak için oluşturulan, kendisinden implement edilen bir sınıfa doldurulması zorunlu olan bazı özelliklerin aktarılmasını sağlayan bir kavramdır.

Bizi tam olarak nasıl bir yapının beklediğini içerisinde bize sunmuş olduğu özellikleri inceleyerek öğrenmemiz daha kolay olacağını düşünüyorum. Bu yüzden “C# Interface Özellikleri” hakkında bahsedeceğimiz bir sonraki aşamaya geçiş yapabiliriz. 🕵🏻

C# Interface Özellikleri

Programlama dillerinde yeni bir kavram öğrenirken, bu öğrendiğimiz yapıyı programlarımızın içerisinde nerelerde, neden ve hangi şekilde kullanmamız gerektiğini çok iyi bir şekilde anlamamız gerekir. Bu yüzden interface (arayüz) kavramını aklımızda daha iyi bir şekilde canlandırabilmek için sahip olduğu özellikleri aşağıda maddeler halinde sıralayacağım.👨🏻‍🏫🎓

  • Sınıf yapılarımız birden fazla interface ile implement edilebilir.
  • Interface yapıları rehber, yol göstericiler olarak tanımlandığı için içerisinde metot oluşumları ve propertyler dışında kod blokları bulunmaz.
  • Interface yapılarımızda bulunan tüm özellikler public olarak kabul edilir.
  • Bir interface (arayüz) yapısını başka bir interface tarafından türetebiliriz.
  • Sınıflar implement ettiği interface içerisindeki bulunan tüm özellikleri implement etmek zorundadır.
  • Interface yapılarımızda oluşturduğumuz metotlar gövdesizdir. Bu yapısı ile abstract metotlara benzerlik gösterir.
  • Interface (arayüz) yapılarımızı kullanarak nesneler oluşturamayız.
C# Interface Özellikleri
C# Interface Kullanım Yapısı

Özelliklere baktığımız zaman DRY (Don’t Repeat Yourself) prensibini kullanarak, sınıf yapılarımızda birden fazla kalıtım gerçekleştirmemizin lazım olduğu zamanlarda veya projelerimize esneklik katarak rahat müdahale etmek istediğimiz zaman interface kullanımını gerçekleştirmemiz gerektiğini anlayabiliriz.👨🏻‍💻

Elbette, teorik olarak bu tarz bilgileri okuyarak anlamak biraz daha güç bir yapıda olsada konumuzun ilerleyen kısımlarında çözeceğimiz örnekler ile bu sorunu ortadan kaldıracağız.💪🏻

Tabii bu örnekleri çözebilmek ve oluşturabilmek için “C# Interface Kullanımı” hakkında bir fikir sahibi olmamız gerekiyor. Bunun için isterseniz bir sonraki aşamamıza geçiş yapalım.

C# Interface Kullanımı

Programlarımızda interface kullanımını gerçekleştirmek için oluşturacağımız yapıların başına interface anahtar kelimesini koymamız gerekmektedir. Yani bu teorik bilginin kod içerisindeki tanımlama şekli ise şu şekildedir:

public interface IDemoManager
{
    void interfaceMethod(); ///---> Gövdesiz Metot Tanımlaması <---\\\
}

Bu tanımlamayı oluştururken yazılı olmayan fakat genel olarak yazılımla uğraşan herkesin uyguladığı artık bir yapıdan faydalandım. Bahsetmiş olduğum bu yapı interface tanımlamasını yaparken kullandığımız ismin başına “I” harfini koymamızdan geçiyor. Böylelikle oluşturmuş olduğumuz yapının bir interface olduğunu kendimiz için belirtmiş oluyoruz.

C# Interface Örnekleri

Teorik olarak öğrendiğimiz bilgileri şekillendireceğimiz, kod yazacağımız işin en eğlenceli kısmı olan örnek çözümlerine geçiş yaptık. Bir çok kaynak araştırması yaptığımda C# Interface Örnekleri için standart olarak bir sınıf yapısının oluşturulup bazı değerlerin hesaplanmasını sağlayan bir yapı oluşturulduğu gördüm. Ben bu yapıları pek sevmiyorum ve bu tarz örneklerin çözülmesini de doğru bulmuyorum.

Bu yüzden aklımızda canlanması daha kolay, projelerimizde uygulama imkanımızın olacağı ve daha değişik örnek uygulamalar geliştirmek istiyorum. Bunun için oluşturacağım örnek yapısında hayali bir otomasyon sistemimizin kullanıcının isteği doğrultusunda çoklu veri tabanına uyum sağlanması işlemini gerçekleştirelim. Örnek yapısı aklınızda canlanmadıysa basit bir görselden yardım alarak örneğimizin yapısını göstermeye çalışıyım. 👨🏻‍🎨👀

C# İnterface Nedir
C# İnterface Örnekleri
  1. Örneğimizin ilk adımı için bir veri tabanından temel olarak istediğimiz işlemlerin yer alacağı ve böylelikle diğer sınıflara yol gösterici bir rehber oluşması için “IDatabase” isminde bir interface oluşturdum.
  2. Oluşturmuş olduğum bu interface içerisine temel giriş, çıkış, veri getir, veri ekle ve veri sil gibi işlemlerin yapılacağı metotlar tanımladım.
  3. Bu iki işlem sonucunda yol gösterici görevindeki interface yapım aşağıdaki halini almış oldu.

    namespace InterfaceApp
    {
        public interface IDatabase
        {
            int login(string userName, string password);
            void close();
            void addValue(string value);
            void deleteValue();
            void getValue();
        }
    }
  4. Daha sonra bu interface yapımı kullanarak “MysqlDatabaseManager” ve “OracleDatabaseManager” isminde iki sınıf oluşturarak implement işlemlerini gerçekleştirdim. Mysql veri tabanı için oluşturmuş olduğum “MysqlDatabaseManager” sınıf yapımdaki mevcut kod bloklarını aşağıdan gözlemleyebilirsiniz.
  5. namespace InterfaceApp
    {
        class MysqlDatabaseManager : IDatabase
        {
            private string value, userName = "mysql", password = "admin",mark = new string ('-',6);
    
            public void addValue(string value)
            {
                this.value = value;
            }
    
            public void close()
            {
                Console.WriteLine("{0}\n-> Mysql veritabanı bağlantınız başarılı bir şekilde sonlandırıldı.\n{1}", mark, mark);
            }
    
            public void deleteValue()
            {
                this.value = null;
                Console.WriteLine("{0}\n-> Veri tabanı üzerinde tutmuş olduğum verileri başarılı bir şekilde sildim.\n{1}", mark, mark);    
            }
    
            public void getValue()
            {
                if (value != null)
                    Console.WriteLine("{0}\n-> İsteğiniz doğrultuda hafızamdaki [{1}] verisini başarılı bir şekilde getirdim.\n{2}", mark,value, mark);
                else
                    Console.WriteLine("{0}\n-> Veri tabanı içerisinde henüz bir veri bulunmuyor. Lütfen daha sonra tekrar deneyin.\n{1}", mark, mark);
            }
    
            public int login(string userName, string password)
            {
                if (userName == this.userName && password == this.password)
                    return 1;
                else
                    return 0;
            }
        }
    }
  6. Aynı şekilde “OracleDatabaseManager” sınıfımın içeriğini de aşağıdaki kod bloğu üzerinden gözlemleyebilirsiniz.
  7. namespace InterfaceApp
    {
        class OracleDatabaseManager : IDatabase
        {
            private string value, userName = "oracle", password = "database", mark = new string('-', 6);
    
            public void addValue(string value)
            {
                this.value = value;
            }
    
            public void close()
            {
                Console.WriteLine("{0}\n-> Oracle veritabanı bağlantınız başarılı bir şekilde sonlandırıldı.\n{1}", mark, mark);
            }
    
            public void deleteValue()
            {
                this.value = null;
                Console.WriteLine("{0}\n-> Veri tabanı üzerinde tutmuş olduğum verileri başarılı bir şekilde sildim.\n{1}", mark, mark);
            }
    
            public void getValue()
            {
                if (value != null)
                    Console.WriteLine("{0}\n-> İsteğiniz doğrultuda hafızamdaki [{1}] verisini başarılı bir şekilde getirdim.\n{2}", mark,value, mark);
                else
                    Console.WriteLine("{0}\n-> Veri tabanı içerisinde henüz bir veri bulunmuyor. Lütfen daha sonra tekrar deneyin.\n{1}", mark, mark);
            }
    
            public int login(string userName, string password)
            {
                if (userName == this.userName && password == this.password)
                    return 1;
                else
                    return 0;
            }
        }
    }
  8. Bu iki sınıfımı oluşturduktan sonra programıma esneklik katabilmek için “DatabaseManager” isminde bir sınıf oluşturarak ilerleyen konularda göreceğimiz çok biçimlilik (polymorphism) kavramını kullandım.
  9. namespace InterfaceApp
    {
        class DatabaseManager
        {
            private IDatabase database;
    
            private string mark = new string('-', 6);
            public DatabaseManager (IDatabase database)
            {
                this.database = database;
            }
    
            public DatabaseManager()
            {
            }
    
            public void loginDB()
            {
                string userName, password;
                Console.Write("{0}\n< Veri Tabanı Bağlantısı >\n{1}\n-> Kullanıcı adını girin: ", mark, mark);
                userName = Console.ReadLine();
                Console.Write("-> Kullanıcı şifresini girin: ");
                password = Console.ReadLine();
                Console.WriteLine(mark);
                if (database.login(userName, password) == 1)
                    menu();
                else
                    Console.WriteLine("-> Bağlantı bilgilerini yanlış girdiniz, sistem kapatılıyor.\n{0}", mark);
                
            }
            private void closeDB()
            {
                database.close();
            }
            private void addValue(string value)
            {
                database.addValue(value);
            }
            private void deleteValue()
            {
                database.deleteValue();
            }
            private void getValue()
            {
                database.getValue();
            }
            
            private void menu()
            {
                string value;
                int v;
                Console.WriteLine("< Veri Tabanı İşlemleri >\n{0}", mark);
                Console.WriteLine("[1] - Veri Ekle\n[2] - Veri Sil\n[3] - Veri Getir\n[4] - Bağlantıyı Kes\n{0}", mark);
                Console.Write("-> Yapmak istediğiniz işlem: ");
                v = Convert.ToInt32(Console.ReadLine());
                switch (v)
                {
                    case 1:
                        Console.Write("{0}\n-> Eklemek istediğiniz veri: ",mark);
                        value = Console.ReadLine();
                        addValue(value);
                        Console.WriteLine(mark);
                        Console.Clear();
                        menu();
                        break;
                    case 2:
                        Console.Clear();
                        deleteValue();
                        menu();
                        break;
                    case 3:
                        Console.Clear();
                        getValue();
                        menu();
                        break;
                    case 4:
                        closeDB();
                        break;
    
                }
            }
    
        }
    }
  10. Son olarak çok biçimlilik kavramından etkin bir şekilde faydalanabilmek için “Main” sınıfımın içerisinde basit bir switch-case kontrol yapısı oluşturdum ve programımı başlattım.
  11. namespace InterfaceApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                ///---> Değerlerin Tanımlanması <---\\\
                string mark = new string('-', 6);
                int value;
                DatabaseManager database;
    
                ///---> Sorgulama İşlemi Gerçekleştirelim <---\\\
                Console.WriteLine("{0}\n< C# Interface Örnekleri >\n{1}", mark, mark);
                Console.WriteLine("[1] - Oracle Database Bağlantısı Kur\n[2] - Mysql Database Bağlantısı Kur\n{0}", mark);
                Console.Write("-> Kararınız: ");
                value = Convert.ToInt32(Console.ReadLine());
                switch (value)
                {
                    case 1:
                        database = new DatabaseManager(new OracleDatabaseManager());
                        database.loginDB();
                        break;
                    case 2:
                        database = new DatabaseManager(new MysqlDatabaseManager());
                        database.loginDB();
                        break;
                    default:
                        Console.WriteLine(mark);
                        break;
                }
            }
        }
    }

Kod Çıktısı:

implementasyon nedir c#
C# Interface Örnekleri (Veri tabanı)

C# Interface Nedir” sorusuna cevap vererek öğrendiğimiz teorik bilgiyi güzel bir örnek ile şekillendirdiğimizi ve pratiğe döktüğümüzü düşünüyorum. Eğer interface (arayüz) konusunda farklı bir kaynaktan konuyu incelemeye devam etmek isterseniz sizlere Microsoft tarafından hazırlanmış buraya tıklayarak ulaşabileceğiniz içeriği tavsiye ederim.

Unutmayın, aklınıza takılan herhangi bir soruyu ya da konu işleyişi ile alakalı önerilerinizi aşağıda bulunan yorum yap kısmından bana iletebilirsiniz. 👍🏻💬👋🏻

Yorum Yap

Yazar Hakkında

Yazmayı, öğrenmeyi, öğrendiklerini paylaşmayı , kodlamayı ve günün birinde Yönetim Bilişim Sistemleri Uzmanı olmanın hayalini kuran birisiyim.

Yorum Yap

Yorumlar (2)

  1. Emre Bey,
    Interface konusunda aklıma takılan bir yeri araştırırken sitenize ulaştım. Hazırladığınız makale işime yaradı, elinize sağlık.
    Teşekkürler.

  2. Gayet açıklayıcı anlaşılır bir makale olmuş. teşekkür ediyorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir