![]() | |
Abstract Ve Interface Arasındaki Farklar | 29.06.2008 22:32:00 |
| Kategori : Visual C# .NET Özet : Makalemiz boyunca abstract ve interface tanımlarının arasındaki tek bir farktan yola çıkarak bir yordamı beraber yazıcağız. | |
Abstract Ve Interface Arasındaki Farklar .
Ama ilk önce çok kısa olarak abstract ve interface nedir diyelim ve neden ihtiyaç duyduğumuzu yazalım . Nesne yönelimli programlamalar oluştururken bazı durumlarda şunu isteyebiliriz. oluşturduğumuz ara yüz ile bu tipi uygulayacak sınıfların ortak bazı metotları property leri kullanmasını isteyebiliriz. Ve bu temel sınıf dan kalıtılan tüm sınıfların temel sınıf içerisinde belirlenmiş metotları kullanmasını isteyebiliriz. Not : Abstract veya interface içine yazacağımız metotların metot gövdeleri bulunmamaktadır . Bunun nedeni tabi ki bu metotların özet metot bir ara yüz olmasıdır. abstract public void Uc () Seklinde abstract metot tanımlarız. bu tanımlamadan metodumuzun bir erişim belirleyicisi geri dönüş tipi ve adı vardır . tanımlamamızın başında ise abstract anahtar söz dizimi kullanılmıştır. Artık c# derleyicisi bu metoda geldiği zaman bunun özet bir metot olduğunu bilir . Simdi bir interface tanımlayalım ve arasındaki bir farka göz atalım interface imizin adına Uc diyelim ve geri dönüş tipi void olsun . void Uc (); Yukarıdaki şekilde Uc adında bir interface tanımladık . abstract ile interface tanımlama arasında bir fark vardır. abstract tanımlamalarda <erişim belirleyicisi > belirtiriz . ama interface tarafında belirtilen metotların <erişim belirleyicileri > tanımlanmaz interface arasına yazılan her metot , property vs .. hepsinin < erişim belirleyicileri > public olarak default atanır . Eğer biz ekstradan bildirmek istersek de hata verir . Yordamımızı yazarken tanımlayacağımız interface ve abstract class larımızın adlarını yazalım . Abstract olarak işaretlenmiş class larımızı adı : abstract uc () ; abstract yuz(); Interface olarak işaretlenmiş class larımızın adı : IUcabilir(); IYuzebilir(); Abstact tanımlamalarımızı yapalım . namespace Ornekkod } Sekil dede görüldüğü gibi abstract class içerisindeki iki adet
metot tanımladık . Dal metodumuz bizden double tipinde _derinlikgir , Cik()
metodumuzda parametre almamaktadır. public double Derinlik { get { return this._derinlikgir; } set { this._derinlikgir = value; } } public string Tur { get { return
this.turbilgisi; } set { this.turbilgisi = value;
} } public override void Dal(double _derinlikgir) public override void Cik()
Simdi örnekleyip çalıştıralım . Balik YeniBalik = new Balik("Mürekkep Balıgı"); Seklinde balik nesnemizi oluşturduk . YeniBalik tipimizin içerisinde
Dal ve Cik metotlarını kullanarak işlemlerimizi gerçekleştirdik. Ornekkod.Balik does not implement inherited abstract member 'Ornekkod.AdstractYuz.Dal(double) Ornekkod.Balik does not implement inherited
abstract member 'Ornekkod.AbstractYuz.Cik()' Önemli Not : Abstract ve interface tiplerimizi örnekleyemeyiz . sadece oluşturmak istediğimiz class ımıza rehberlik etmesini sağlayabiliriz . Simdi uçabilen bir tip ( Kus ) tanımlayalım ve abstractUc kalıtım
kullanalım ve örnekleyelim . yukarıdaki balik tipimizdeki gibi bir tanımlama
yapalım kusun turunu alalım ve abstract içerisindeki metotlarımızı implement
edip kullanalım . class Kus : AbstractUc public double Yukseklik { get { return this._yukseklik; } set { this._yukseklik = value; } } public string Tur { get { return this._turu; } set { this._turu
= value; } } public override void Uc(double _yukseklik) public override void Kon(string _mekan) Simdi Kus tipimizi örnekleyelim . Kus YeniKus = new Kus("Papağan"); Yukarıdaki tanımlamalarda balik tipimizi ve kus tipimizi oluşturup örnekledik ve sonuçlarını inceledik . Abstract class larımızı tipimize bağlayıp kurallarımızı oluşturduk ve implement edip uyguladık. Simdi hem yüzen hem ucan bir tur bulalım ve örneklemeye çalısalım . Hem uçan hem yüzen Karabatak sınıfımızı yazalım . Bakalım bu karabatak sınıfımızı yazarken bizi ne bekliyor.
namespace Ornekkod
Simdi biz karabatak sınıfımızı interface lerimizi kullanarak oluşturalım makalemize baslarken interface lerimizi oluşturmuştuk. Simdi direk karabatak sınıfımız üzerinde interface lerimizi
tanımlayalım . public void Uc(double _yukseklik)
} public void Kon(string _mekan) Mekan = _mekan; } #endregion #region IYuzebilir Members public void Dal(double derinlik) Derinlik = derinlik; } public void Cik() Console.WriteLine("{0} adındaki karabatak {1} metre derinlikden
cıktı",this.Adi,this.Derinlik); } #endregion Abstract veya interface olarak tanımlanan tipler örneklenemezler
. Farklılıkları : Abstract tanımlarken <erişim belirmeyici
> kullanırız . Bir tipe bir tane abstract ama istedigimzi kadar interface ekleyebiliriz. Bu makale boyunca elimizden geldigi kadar abstract ve interface
arasındaki farkları ortaya koymaya anlatmaya calıstık .Umarım yararı olmustur.
Sonsöz : Abstract veya interface
tanımlamak aslında bir uygulama yazar iken bizim daha önce koyduğumuz kullanmak
zorunda kaldığımız metotları atlamamızı engeller
| |
Yazgelistir.com | |