C# Sorularım
1 1

Bu konuda 42 mesaj var

Gençler bu C# 'de interface denen naneyi kullanan var mı ? 

 

Classların bazı metotlarına erişim verip vermeme gibi yorumladım ben şöyle bir örnek uydurdum kafamdan böyle mi kullanıyorsunuz nasıl kullanıyorsunuz interface özelliğini ? 

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Igiris objGiris = new clsTamDonanim();
            Iorta objOrta = new clsTamDonanim();
            Iust objUst = new clsTamDonanim();

            objGiris.BAZ_ARABA();

            objOrta.BAZ_ARABA();
            objOrta.CELIK_JANT();
            objOrta.NAVIGASYON();

            objUst.BAZ_ARABA();
            objUst.CELIK_JANT();
            objUst.NAVIGASYON();
            objUst.OTOMATIK_VITES();
            objUst.SUN_ROOF();

        }
    }

    class clsTamDonanim : Igiris, Iorta, Iust
    {
        public void BAZ_ARABA()
        {
        }          

        public void CELIK_JANT()
        {
        }

        public void NAVIGASYON()
        {
        }

        public void OTOMATIK_VITES()
        {
        }

        public void SUN_ROOF()
        {
        }
    }

    interface Igiris
    {
        void BAZ_ARABA();
    }

    interface Iorta
    {
        void BAZ_ARABA();
        void CELIK_JANT();
        void NAVIGASYON();
    }

        interface Iust
    {
        void BAZ_ARABA();
        void CELIK_JANT();
        void NAVIGASYON();
        void OTOMATIK_VITES();
        void SUN_ROOF();
    }
}

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Tam öyle değil, erişimden ziyade "birader bunları sağlamak zorundasın" şeklinde bir durum var. Bir tür sözleşme gibi düşünülebilir. Ben mesela atıyorum benim yazdığım bir modül ile haberleşmenizi istiyorum, buna uygun bir interface veriyorum size. Benim modülüm ile haberleşebilmeniz için sağlamanız gereken bir takım fonksiyon ya da metod ya da adına ne diyorsanız ondan sağlamanızı, bu interface üzerinden sınıfta olması gereken üyelermiş, eventlermiş vs.. olması gerekenleri size şart koşuyorum. "My way or the highway" veya "ya bu deveyi güdeceksin ya da bu diyardan gideceksin" de diyebiliriz :D.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Yukaridaki ornekte bir tane class yaptim icinde baz araba , celik jant, otomatik vites , navigasyon ve sunroof var.

 

3 tanede interface yaptim giris orta ve ust seviye. Giris seviyesine sadece baz araba ya erisim verdim orta seviyeye baz araba celik jant ve navigasyona erisim verdim. Ust seviyeyede ne varsa hepsine erisim yetkisi koydum :)

 

Boyle baska bir ornek verebilme sansiniz varmi gercek hayattan anlayabilmek icin ?

 

Benim sikintim ara ara program yapmak, 6 ara verince unutuyorum interface diye notlarimi okurken gordum o zaman yazdigim ornek kod simdi bana anlamsiz geldi. O yuzden boyle orneklendirmek istiyorum.

 

Bu arada yazilimci gorursem mutlaka onla konusur fikir alis verisi yaparim. Yaptigi islerini cok begendigim ve zekasina inandigim orta tecrubeli genc bir cocuk var mesela bugun ona method hiding yapiyormusun dedim o ne hic yapmadim dedi mesela . Sonra polymofizm olayini sordum onuda hic yapmadim dedi.

 

Boyle arastiriyorum bir konsept karsima cikiyor ulan bunu nerede kullanabilirim acaba diye dusunuyorum genelde olmasa da olur tarzi seyler gibi geliyor boyle ozellikler.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

verdiğin örnek doğru. başka örnek vereyim. santranç programı yazarken IDüzgidebilir, IÇaprazgidebilir gibi interfaceler tanımlayıp birini file birini ata verirsin, vezire ikisini de verirsin. taşların hepsi ortak taş diye bir sınıftan türediyse zaten çoklu kalıtım yapamazsın. deilse bile vezir için olayı çözemiyosun. interface şart oluyor.

 

aslında bu tip ince şeyleri simülasyon yada oyun falan yazmak hariç, problem çözmeye yönelik yazılım geliştirmekten çok, genel geçer kütüphane kodlarken kullanırsın. yani web sayfası yada veri giriş formu kodlarken pek işine yaramaz.

 

method hiding duyunca arkadaşın gibi ben de o neymiş dedim. araştırınca gördüm bildiğim bişeymiş. ben onu kullandım, şöyle ki winformsda component geliştirirken bazı metodların adının designerın istediği gibi olması gerekiyordu, ama türediğim class o metodu virtual tanımlamadığı için (kahrolası ms:) ) mecburen yeniden tanımlayıp warningi engellemek (compilera naaptığımın farkında olduğumu göstermek) için kullanmıştım. kimsenin kolay kolay işi düşeceği bişey olmadığı gibi, tavsiye edilen bişey de değil. ancak bu gibi extreme durumlarda mecbur kalınınca kullanılır.

 

polymorphism candır. o çocuk ya farkında olmadan kullanmıştır ya çok amelece kod yazıydur yada ekranları tasarlamak dışında bi iş verilmemiştir. polymorhpism yerine birde hiç virtual method tanımlamadın mı diye sor belki o zaman anlar muhtemelen de kullandım der.

Hayalet beğendi

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Bizzat elimdeki ornegimden gosterdim virtual / override metodlari kullanmamis gercekten. Ama cocukta 5 senelik benim elimde olmayan cok genis bir kutuphane var cok hizli sorunsuz kod yazar. Klaslari dllleri artik kendine ait frameworku var diyebilirim. Neyse bu sefer 1 sene kadar elimde yazilim isi olacak kendimi gelistirmek istiyorum bu konuda yazilimcilar bizim muhendislerin teorisini bilmedigi icin yazilimlari cok eksik kaliyor bizde yazilim az bildigimiz programlama oluyor birseyler cikiyor ortaya ama bilmedigimiz oyle cok varki oda varmis buda varmi yuh artik diyorsun bu kadar ozellik nasil turetilmis ....

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Interface için şöyle bir örnek verebilirim. Zorunlu değil bu yöntem ama işe yarıyor. Atıyorum aynı amaçlı kullanılan ama 10-15 tane farklı firmanın hizmet verdiği bir web servis var. Kabaca gönderme, alma, sorgulama şeklinde üç adet fonksiyon ve bu fonksiyonların kullandığı tipler olsun. Bu fonksiyonlar interface ile tanımlanmış, sonradan eklenmesi istenen bir firmaya özel sınıfları yazdırıyoruz kim yazıyorsa artık. Elemanın yazacağı sınıf bu üç fonksiyonu içermesi ve dolayısıyla parametre olarak aynı tipi kullanması şart. Böylece sonradan gelen adamın kafasına göre kod yazması nispeten önlenmiş oluyor. Ön tarafta çağrılan fonksiyon adı hep aynı ama arkada çalışan fonksiyon farklı. En basit haliyle canlı kullanımı bu şekilde örneklendirilebilir. Benzer şekilde web servislerin bizzat kendileri de genelde bu "interface" mantığı üzerine kurulu. Arayüz programlamada da kullanılıyor. DevExpress gibi firmaların mesela web tabanlı komponentleri ağırlıkla interfaceler üzerine kurulu.

 

Kendinizi geliştirmenin yolu büyük projeler yapmak, başkalarının yazdığı kodları incelemek, sürekli olarak "kullandığım geliştirme ortamı bana ne sağlıyor" diyerek araştırmak ve güncellemeleri takip etmek. Bir yandan ikinci bir dil veya geliştirme ortamı ile hatta mümkünse alt seviyede ağırlıklı olarak haşır neşir olmak.

 

Tabii bunları kullanarak bir işi yaparken aşırıya kaçmamak (over engineered kod yazmamak), gereksiz yere basit bir kodu artislik yapacam diye hantallaştırmamak vs.. :D.

 

Kabaca böyle...

Hayalet beğendi

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Valla ben de hiç interface kullanmadım, işim düştükçe öğrenen birisi olduğum için ve şirkette yaptığımız işlerde de hiç ihtiyaç duymadığım içinde nedir, ne işe yarar pek bir bilgim yok. Bir ara araştırmamda fayda var ama öyle über meraklı birisi olmadığım için de o iş yaş. :)

 

En fazla yazdığımız masaüstü uygulamada BL' i yaz, Modelleri yaz, database işlemlerini BL' lerde tanımla, Modellerin özellik izinlerini düzgün ver, formu çak geç yapıyorum.

 

Web tarafında zaten ağırlılı C# kodu değil de JQuery kullandığımız için orada da bir nane yapamıyorum.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Ben 15 senedir C# ile uygulama geliştiriyorum, ben de hiç kullanmadım...

 

 

deeeermişim :D .

 

Interface olmadan SOA/WCF, Dependency Injection olmaz, kod öksüz kalır, yarım olur, eksik olur :)

 

İşte Java'nın kanımca en üstün yanı bu. Interface bilmeden düzgün Java projesi yazmanız zor ama C# ile tek interface içermeyen milyon liralık proje yazabilirsiniz. Java insanı işin doğrusunu yapmaya teşvik eder. Evime C#'dan kazandığım parayı götürüyorum ama Java'nın yeri ayrıdır.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Bir formun icindeki string degiskenini, baska bir formun metoduna gonderemiyorum ya kafayi yicem. Forma gonderiyorum konstruktorden ciktigi anda degeri sifirlaniyor metoda bos geliyor.

Osmanli usulu gorunmez bir kutuya yazdirip kullanabiliyorumda duzgun yapmak istiyorum.


Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Şu şekilde çözdüm gönderilen argümanları statik yaptım ama istediğim gibi güzel bir yöntem olmadı doğrudan değerleri gönderebilmenin bir yolu vardır mutlaka  :)

 

Daha basit bir yöntem varsa çok minnettar olurum arkadaşlar iki parametre için bu kadar kod yazılmaması lazım :), ben şunu farkettimki c# 'ı OOP olarak kullanamıyorum hala

bir sürü class tanımladım kullanırım diye dine böyle VB6 kodu gibi bir koda dönüyor proje ...  :icon_think:

namespace OTTStandartResimler
{
    public partial class Form1 : Form
    {
        //Bu iki argümanı static olarak tanımlamazsam, constructor'den çıktığı anda değerleri tekrar sıfırlanıyor kullanamıyorum:
        public static string dwgDosyaYolu = "";
        public static string pdfDosyaYolu = "";
        
        public Form1()
        {
            InitializeComponent();                                               
        }

        // Form1 konstüktörüne overloading yapıyorum :
        public Form1(string dwg,string pdf)
        {
            dwgDosyaYolu = dwg;
            pdfDosyaYolu = pdf;
        }
                                                     
        private void btn_resim_ekle_Click(object sender, EventArgs e)
        {      
            // Buraya göndermek istiyorum değerleri                 
            MessageBox.Show(dwgDosyaYolu);
            MessageBox.Show(pdfDosyaYolu);                                       
        }
    }
}


namespace OTTStandartResimler
{
    public partial class frmGiris : Form
    {

        public string dwgDosyaYolu_;
        public string pdfDosyaYolu_;

        public frmGiris()
        {
            InitializeComponent();
        }

        private void btn_ekle_Click(object sender, EventArgs e)
        {            
            this.Hide();
            // Şu iki değeri form1 konstrüktörüne gönderiyorum :
            Form1 f = new Form1(dwgDosyaYolu_, pdfDosyaYolu_);
        }

        private void btn_dosya_ekle_Click_1(object sender, EventArgs e)
        {
            
            OpenFileDialog OFD = new OpenFileDialog();
            OFD.Filter = "DWG Dosyaları (.dwg)|*.dwg|DXF Dosyaları (.dxf)|*.dxf";
            OFD.FilterIndex = 1;
            if (OFD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                dwgDosyaYolu_ = OFD.FileName;
                MessageBox.Show(dwgDosyaYolu_);
            }            
        }

        private void btn_pdf_ekle_Click(object sender, EventArgs e)
        {
           
            OpenFileDialog OFD = new OpenFileDialog();
            OFD.Filter = "PDF Dosyaları (.pdf)|*.pdf";
            OFD.FilterIndex = 1;
            if (OFD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                pdfDosyaYolu_ = OFD.FileName;
                MessageBox.Show(pdfDosyaYolu_);
            }
        }
    }
}

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Kodu derinlemesine incelemedim ama ilk gözüme çarpanlar:

 

- "" yerine String.Empty

- Parametreler her daim gerekiyorsa oluşturma metodunun üstüne basmanıza gerek yok.

- Nesneyi oluştururken atadığınız değişkenleri "public" yapmayın veya nesneyi oluşturduktan sonra zaten "public" oldukları için atanabilecekleri için ek bir kod yazmaya hacet yok. Bence public yapmayın.

- Üyelerin durağan olmalarına da gerek yok. Küllün "static" bir sınıfınız yoksa her yerden erişmek istediğiniz (alet edevat sınıfı gibi) "static" üyelere girmeyin.

    private int mDirection = -1;

    public FormZartZurt(int pDirection)
    {
      InitializeComponent();

      mDirection = pDirection;
    }

"Direction değeri neydi" diye bakmak gerekiyorsa sonradan bir "property get"  ile erişilebilir vs.. vs..

Hayalet beğendi

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

onlytnt cevap için çok teşekkür ederim.

 

Yukarıdaki bahsettiğiniz yöntemi denedim ilk başta. Ama konstrüktörden çıkıp şu metoda girince değeri null olmuştu 

 

private void btn_resim_ekle_Click(object sender, EventArgs e)

 

değer başka bir form class'ın paramatresi aynı form class'ın parametresi değil.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Bu kısımda Form1'in scope'u sadece o method olduğundan methottan çıkınca "f" yok olur.
 

private void btn_ekle_Click(object sender, EventArgs e)
{
this.Hide();
// Şu iki değeri form1 konstrüktörüne gönderiyorum :
Form1 f = new Form1(dwgDosyaYolu_, pdfDosyaYolu_);
}

Bunun yerine 

        public string dwgDosyaYolu_;
        public string pdfDosyaYolu_;

        Form1 f;

        public frmGiris()
        {
            InitializeComponent();
        }
 
        private void btn_ekle_Click(object sender, EventArgs e)
        {            
            this.Hide();
            // Şu iki değeri form1 konstrüktörüne gönderiyorum :
            f = new Form1(dwgDosyaYolu_, pdfDosyaYolu_);
        }

şeklinde deneyebilirsin.

Hayalet beğendi

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Çocuk - ebeveyin pencere şeklinde de gidebilirsiniz, tasarladığınız uygulamaya uygunsa. Bir diğer seçenek using içerisinde dialog açılabilir sanırım.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Yorum yazmak için üye olun veya giriş yapın

Yorum yazmak için üye olmanız lazım

Üye ol

Üye olun ve sitemizin tüm avantajlarından yararlanın!


Yeni bir hesap oluştur

Giriş yap

Zaten üyemiz misin? O halde giriş yap


Hemen giriş yap
1 1

  • Bu sayfadaki üyeler   0 üye

    Şu an bu sayfayı görüntüleyen bir üye yok