Mesaj tarihi: Mayıs 3, 2016 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ş
Mesaj tarihi: Mayıs 3, 2016 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 . Bu mesajı paylaş Bu mesajın linki Sosyal ağlarda paylaş
Mesaj tarihi: Mayıs 3, 2016 interface kod blokları arasındaki kontratlardır. ne demek istediğimi tecrübe kazanırken anlıycaksın. Bu mesajı paylaş Bu mesajın linki Sosyal ağlarda paylaş
Mesaj tarihi: Mayıs 3, 2016 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ş
Mesaj tarihi: Mayıs 3, 2016 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ş
Mesaj tarihi: Mayıs 3, 2016 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ş
Mesaj tarihi: Mayıs 4, 2016 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.. . Kabaca böyle... Hayalet beğendi Bu mesajı paylaş Bu mesajın linki Sosyal ağlarda paylaş
Mesaj tarihi: Mayıs 4, 2016 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ş
Mesaj tarihi: Mayıs 4, 2016 Ben 15 senedir C# ile uygulama geliştiriyorum, ben de hiç kullanmadım... deeeermişim . 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ş
Mesaj tarihi: Mayıs 4, 2016 Interface candır. Bu mesajı paylaş Bu mesajın linki Sosyal ağlarda paylaş
Mesaj tarihi: Mayıs 5, 2016 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ş
Mesaj tarihi: Mayıs 6, 2016 Ş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 ... 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ş
Mesaj tarihi: Mayıs 6, 2016 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ş
Mesaj tarihi: Mayıs 6, 2016 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ş
Mesaj tarihi: Mayıs 6, 2016 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ş
Mesaj tarihi: Mayıs 6, 2016 yariletken teşekkür ederim bunun için : f = new Form1(dwgDosyaYolu_, pdfDosyaYolu_); YaRiLeTkEn beğendi Bu mesajı paylaş Bu mesajın linki Sosyal ağlarda paylaş
Mesaj tarihi: Mayıs 6, 2016 Ç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ş