Saturday, March 9, 2013

Setup Oluşturma (c#)

1. adım:  Solution explorer kısmındaki solution dosyamıza sağ tıklıyoruz.














2. adım:  Add new project  diyoruz.

3. adım:  Other other project types'i seçiyoruz.

4. adım:  Setup and deployment proje tipini seçiyoruz.

5. adım: Visual studio installer'i seçiyoruz.

6. adım: Açılan pencereden setup project'i seçip oluşturuyoruz.



7. adım:  Solution explorer kısmında oluşturduğumuz setup dosyamıza sağ tıklayıp build ediyoruz.














Setup dosyamız projemizin bulunduğu dizindeki debug klasöründe oluşturuldu.

Thursday, March 7, 2013

Video Player Programı (C#)


Program.Cs  :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmMain());
        }
    }
}


MainForm.CS :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
         
        }

       
        private void btnRecor_Click(object sender, EventArgs e)
        {
         
            RecorderForm frm = new RecorderForm();
            frm.ShowDialog();
        }

        private void btnPLayer_Click(object sender, EventArgs e)
        {
         
            FrmPlayer frm = new FrmPlayer();
            frm.ShowDialog();
         
        }

        private void frmMain_Load(object sender, EventArgs e)
        {

        }
    }
}




PlayerForm.Cs :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using ResimİslemLib;


namespace WindowsFormsApplication2
{
    public partial class FrmPlayer : Form
    {
        public FrmPlayer()
        {
            InitializeComponent();
        }

        private void BtnAc_Click(object sender, EventArgs e)
        {
            /*click olayının baslaması ile birlikte gereken kontolleri başlatmak için  kullanıcının bir dosyayı açmak
 için dosyayı seçip aç butonun basıp basmadığını kontrol ettirmemiz gerekiyor.*/
            DialogResult Cevap= opfDosyaAc.ShowDialog();
            if (Cevap != DialogResult.OK)
                return; //okey dışında herhangi bir şeye bastıysa hiç bir işlem yapmadan çıkıyor.

            if (opfDosyaAc.FileName != "" && File.Exists(opfDosyaAc.FileName) && opfDosyaAc.FileName.EndsWith("mrd"))
            { /*(1-dosya adı boş değil ise, 2- dosya adı mevcut ise, 3- seçilen dosyanın uzantısı mrd ile bitiyor
 ise)*/
                txtPath.Text = opfDosyaAc.FileName;
                btnStart.Enabled = true;
                btnStop.Enabled = true;

            }
        }

        private void txtPath_TextChanged(object sender, EventArgs e)
        {

        }

        List<Bitmap> liste;/*sınıf bazında erişilebilir olsun diye tanımını burada yaptık*/

        private void btnStart_Click(object sender, EventArgs e)
        {

            FileStream fs = new FileStream(txtPath.Text, FileMode.Open);/*file open ile seçtiğimiz yolu 
filemode modunda ile ac*/
            BinaryFormatter bf = new BinaryFormatter();
            SaveCapture dosya  =(SaveCapture)bf.Deserialize(fs); /*tekrar class dosyasına çevirdi. deserialize 
dediğimiz an bize döndürdüğü tip objecttir.  tüm class lar deserialize edildiğinde tipleri karşılaya bilmek için 
objecttir. savecapture' e cast etmeliyiz ki  içindeki resimlere ulaşabilelim*/
            liste = dosya.GetList();
            /*player bastığımızda save ile kaydedilenmrd uzantılı dosyayı alıyor BinaryFormatter ile Serializable
 ediyor tekrar ilk bastaki formata  doldurulan formata çevriliyor. o sınıfı elde ettikten sonra da sc. GetList 
dediğimizde o sınıfıa eklenmis olan tüm sınıflar gelmiş oluo.*/

            tmrPlay.Interval = dosya.Interval; /*play tusuna bastığımız anda ki timerin zamanını dosyadan çekme 
zamanına eşitledik.*/
            tmrPlay.Enabled = true; /*tick eventinin timer'ini start clickine basıldığı an başlatmak için*/
        }

        int sira = 0;

        private void tmrPlay_Tick(object sender, EventArgs e)
        {
            pctVideo.Image = liste[sira];
            sira++;
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            tmrPlay.Enabled = false;
        }
    }
}


SaveCapture.Cs :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace ResimİslemLib
{
    [Serializable] /* kodların gömülü olarak byte türünden saklanması için serializable kodunu kullandık, bu 
sayede görüntüler programın cdi kodları arasında saklanabilecek. */
    public class SaveCapture
    {
        private int interval; /*dosyaya yazdırma frekansını ayarlamak için kullanacağız. */

        public int Interval
        {
            get { return interval; }
            set { interval = value; }
        }

        public SaveCapture()
        {
            this.interval = 300;
        }

        public SaveCapture(int interval)
        {
            this.interval = interval;
        }

        List<Bitmap> dosya = new List<Bitmap>(); /* bitmap türünden veriler saklayan generic yapısında 
dosya adında liste tanımladık. */

        public void AddList(Bitmap resim) /*listemize resim eklemek için bu metodu hazırladık*/
        {
            dosya.Add(resim);
        }

        /* dosyayı dışarıya göndermek için; */
        public List<Bitmap> GetList()
        {
            return dosya;
        }


        public void SaveFile(string path)/* path dosyanın yolunu belirticek*/
        {
            FileStream fs = new FileStream(path, FileMode.CreateNew); /* filestream sınıfı ile yeni bir dosya 
oluşturduk.*/

            BinaryFormatter bf = new BinaryFormatter(); /* binaryformatter serilaze veya deserilaze yapmamızı 
sağlar. */
            /*serilaze:classı içerisindeki veri ile diske yazmak,    deserilaze: diske yazılmış halini alıp classa 
çevirmek. */
            bf.Serialize(fs, this); /*diske yazmak için serilaze bizden işlemden sonra nereye 
kaydedileceğini(filestream) ve kaydedilecek nesneyi istiyor(class). */
            fs.Flush(); /*dosyayı yazdırıyor*/
            fs.Close(); /*kapatmaz isek stream mesgul olarak kalır program hata verir*/
        }
    }
}


ScreenCapture.Cs :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms; /*screen sınıfı forma has bir yapı olduğundan dolayı refaranslara windows formu eklememiz gerekiyor.*/


namespace ResimİslemLib
{
    public class ScreenCapture
    {
        public Bitmap CaptureScreen() {

           /*(beyaz kagıt)*/Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height );/*öncelikle width ve heigth değerlerini verip bir bitmap  ekran görüntüsü olışturmamız lazım.*/
            /*bitmapler ile çalışırken asıl işi yapan graphics sınıfıdır. ve yaptığınız değişikler bitmape yansır. o zaman bizim bir grafik nesnesi olusturup bitmapi ona dahil etmemiz gerekir.  new grafik ile grafik nesnesi olusturamiyoruz. graphics sınıfının altında statik metotlar vardır. fromlardan biri ile graphics metodu oluşturulur. bizim burda kullanacığımız image metodur. */

            /*(ressam)*/Graphics gr = Graphics.FromImage(bmp);
            /*Graphics sınıfı ekranın görüntüsünü çekebilir.*/
            gr.CopyFromScreen/*(ekran görüntüsü yakalıyor)*/(0, 0, 0, 0, new  Size(bmp.Width, bmp.Height)); /* bu metodunda 4 aşırı yüklenmiş metodu  vardır. koordinatları belirlemek için kullanılır. copyscreen ile ekranın belirli bir kısmının görüntüsü alınabilir.*/
            /* şuanda bmp de ekranın görüntüsü var. */

            return bmp;
        }
    }
}

Programı indirmek için ; 



Link:   https://hotfile.com/dl/197357241/f61aa1f/Video_Player.rar.html

Saturday, February 9, 2013

Collections ve Generic


Koleksiyonlar:

System.Collections isim uzayında yer alırlar.

Generic:

System.Collections.Generic isim uzayında yer alırlar.













Array:

Tüm genel diziler Array sınıfından türemiştir. Bu sınıfın dezantajı dizi boyutunun başlangıçta bilinmesinin gerekli olmasıdır. Önceden boyutu belli olan ve tek bir veri tipinin saklanacağı yapılar için uygundur.

int [] array = new int[10];
string []  array2 = new string[10];

ArrayList:

Dizilerin benzeridir. Tek farkı sadece object tipinden verileri saklanabilmesidir. Dolayısıyla ArrayList'e atılan veriler object tipinde değilse boxing uygulanır ve performans düşer. Boyutunun başlangıçta bilinmesi gerekmemektedir.

Add metodu ile eleman eklenir. Sort metodu ile elemanları sıralayabiliriz.

ArrayList liste = new ArrayListe();
liste.add("merhaba");
liste.add(2);

HashTable ve SortedList:

HashTable verileri Key alanın Hash kodlarına göre, SortedList ise alfabetik sıraya göre yapar. HashTable daha hızlı çalışır. Boyutun önceden bilinmesi gerekmez.

HashTable tbl=new HashTable();
tbl.Add("1", "metin");
tbl.Add("a",3)

Stack:

Son elemana ulaşmak en kolaydır. ilk elemana ulaşmak için diğer bütün elemanları çıkarmak gerekir.

Push() metodu koleksiyona eleman eklemek için kullanılır.

Pop() metodu son giren elemanı verirken bu elamanı koleksiyondan siler.

Bunun önüne geçen metod Peek() metodudur.

Stack stc=new Stack();
Stc.Push("deneme");

Stack stc = new Stack();
stc.Push("deneme");
stc.Push(120);
stc.Push(true);
stc.Pop();

Queue:

Enqueue() metodu koleksiyona eleman eklemek için kullanılır.

Dequeue() metodu koleksiyona giren eleman verirken bu elemanı koleksiyondan siler.

Bunun önüne geçen metod Peek() metodudur.

Queue sira=new Queue();

stc.Enqueue("deneme");
stc.Enqueue(120);
stc.Enqueue(true);

Generic:


List<T>:

En verimli çalışan ve en çok kullanılan Generic sınıfımızdır. ArrayList sınıfının Generic versiyonudur.

List<int> lst = new List<int>();

Lst.Add(2);
Lst.Add(192);


Dictionary<>  ve SortedList<>:


HashTable ve SortedList yapısını kullanmaktadırlar. Tek fark Key ve Value değerlerinin generic olmasıdır. Bu da her veri için iki adet boxing işleminden kurtulmak demektir. Bu da bize çok fazla performans artışı sağlar.

Dictionary<int, string> d = new Dictionary<int, string>();
d.Add(1,"metin1");
d.Add(2,"metin2");
d.Values----- Verileri dizi şeklinde getirir.


Stack<T>  ve Queue<T>:


Stack<int> stc = new Stack <int>();
stc.Push(5);
stc.Push(10);
stc.Pop();
stc.Peek();


Queue<int> q = new Queue<int>();
stc.Enqueue(5);
stc.Enqueue(10);
stc.Dequeue();
stc.Peek();






Friday, December 14, 2012

Arayüzlerin (Interface) Kullanılması (c#)


 .NET sınıfı kütüphanesinde de birçok arayüz bulunmaktadır. Her arayüz çeşitli amaçlar için yazılmıştır. Örneğin System isim alanında bulunan IDisposable arayüzü gereksiz nesne toplayıcısı (garbage collector) için gerekli olabilecek Dispose() metodunun uygulanmasını zorlar. Aynı şekilde System.Collections isim alanında bulunan IEnumarable arayüzü tanımladığımız sınıfların foreach döngü yapısı ile kullanabilmesini sağlar. IEnumarable arayüzü içindeki metotlar ilgili sınıf tarafından uygulanırsa tanımlanan bu sınıf foreach döngüsü ile kullanılabilir. Çünkü foreach döngüsü çalıştırılmaya başlanınca foreach bloğunda kullanılan sınıfn IEnurable arayüzünü uygulayıp uygulamadığını kontol edilir. Eğer bu arayüz uygulanmış ise IEnumarable arayüzündeki metotlar kullanılarak foreach döngüsü işletilir.Bu konumuzda IEnumarable arayüzünün kullanımına bir örnek vereceğiz.

IEnumarable arayüzünü uygulayan bir sınıf foreach döngü yapısı ile kullanılabildiğini söylemiştik. Tabi foreach döngü yapısı ile kullanabileceğimiz bir sınıfın yapısında dizi ya da daha sonra göreceğimiz koleksiyon tabanlı bir yapının bulunması mantıklı olur.


using System;
using System.Collections;

class Koleksiyon : IEnumerable
{
    int[] Dizi;
    public Koleksiyon(int[] dizi)
    {
        this.Dizi = dizi;
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return new ENumaralandirma(this);
    }

    class ENumaralandirma : IEnumerator
    {
        int indeks;
        Koleksiyon koleksiyon;

        public ENumaralandirma(Koleksiyon koleksiyon)
        {
            this.koleksiyon = koleksiyon;
            indeks = -1;
        }

        public void Reset()
        {
            indeks = -1;
        }
        public bool MoveNext()
        {
            indeks++;

            if (indeks < koleksiyon.Dizi.Length)
                return true;
            else
                return false;
        }

        object IEnumerator.Current
        {
            get
            {
                return (koleksiyon.Dizi[indeks]);
            }
        }
    }
}

public class MainMetodu
{
    public static void Main()
    {
        int[] dizi = {1,2,3,8,6,9,7};

        Koleksiyon k= new Koleksiyon(dizi);

        foreach(int i in k)
            Console.Write(i + " ");

        Console.ReadLine();
    }
}





Bu programı derlediğimizde ekrana

1 2 3 8 6 9 7

yazıldığını göreceğiz.

Programda neler olup bittiğine göz atmak gerekirse, Koleksiyon isimli bir sınıfın yapısındaki Dizinin eleman değerlerini foreach döngüsü ile elde etmek için Koleksiyon sınıfı System.Collections isim alanında bulunan IEnumarable arayüzünü uyguluyor. Dolayısıyla IEnumarable arayüzündeki bütün metotları uygulamalıdır. IEnumerable arayüzünde sadece

IEnumerator GetEnumerator();

metodu ile bildirilmiştir. Bu metot dizinin içerisinde dolaşmak için gerekli olan IEnumerator referansına geri dönmektedir. Bu yüzden bu metot aşağıdaki gibi yazılmıştır.

IEnumerator IEnumerable.GetEnumerator()
{
  return new Enumaralandırma(this);
}

GetEnumerator() metodunun geri dönüş değeri için IEnumerator arayüzünden türetilmiş IEnumaralandırma sınıfı bildirilmiştir. IEnumerator arayüzündeki metot ve özellikler Koleksiyon nesnesi içindeki dizinin elemanlarına erişmek için kullanılacaktır. IEnumerator arayüzünde bulunan üye elemanlar aşağıdaki gibidir.

object Current{
get;
}

bool MoveNext();

Void Reset();

Bu iç elemanında IENumaralandırma sınıfında bildirilmesi gerekir. Current özelliği koleksiyon nesnesinin herhangi bir andaki değerini gösterir. Sade get bloğunu bildirmek yeterlidir. MoveNext() metodu dizi koleksiyon dizisi içinde bir sonraki elemana geçmek için kullanılır. Eğer bir sonraki elemana geçilemiyorsa false deperini geri döner. Reset() metodu ise koleksiyon dizisini herhangi bir andaki değerini ilk elemandan önceki elemana çeker. Yani dizinin indeksi -1 olur.

IEnumaralandırma sınıfının bir tane yapıcı metodu vardır. Bu yapıcı metot ile üzerinde işlem yapılacak Koleksiyon nesnesi alınmaktadır. Yapıcı metot ile aynı zamanda ENumarandırma sınıfındaki indeks değişkenide -1 değerine çekiliyor. Reset() metodunda ise indeks değişkeni bir artırılıyor. Eğer indeks değişkeninin  yeni değeri dizinin boyutundan büyükse false değerini geri dönmektedir. Current özelliğinin object olduğuna dikkat edin. Eper bu özellik object türünden olmasaydı mğmkğn olabilecek tür dönüşümlerini hesaba katmazsak bütün işlemleri sadece Current özelliği ile aynı türden olan diziler üzerinde yapabilirdik.

Açık (Explict) Arayüz Uygulama


C# dilinde arayüzleri uygulamanın bir yolu daha vardır. Explicit Interface Implementation. Bu yöntem daha önce bahsedilen yöntemlerin aşağıdaki kısımlarından kaynaklanmaktadır.

- Açık arayüz uygulama yöntemi ile istenirse türeyen sınıflarda arayüzde bulunan üye elemanlar açık bir şekilde nesneler tarafından erişilemez hale getirilebilir. İlgili üye elemanlarına sadece arayüz referansları ile erişilmesi sağlanır.

- Birden çok arayüz uygulandığı durumlarda eğer aynı isimli üye elemanlar varsa isim çakışmasının önüne bu yöntemle geçilebilir.

Açık arayüz uygulaması yapmak için arayüzün üye elemanları arayüz isimleri ile beraber belirtilir. Aşağıda buna bir örnek verilmiştir.

using System;
using System.Collections.Generic;
using System.Text;

namespace explicitinterfaceimplemetantion
{
  class Program
  {
     static void Main(string[] args)
     {
        Kedi k= new Kedi();
       
        ((IMEmeli).k).Konus();
     }
  }

interface IMemeli
{
   void Konus();
}

class Kedi : IMemeli
 {
   void IMemeli.Konus()
   {
      Console.WriteLine("miyav");
   }
 }
}

Yukarıdaki örnekte de görüldüğü üzere Konus() metodunun çağrılabilmesi için IMemeli arayüzü referansına çevrilmesi gerekiyor. Direkt Kedi nesneleri üzerinden Konus() metodu çağrılamayacaktır. Böylece sınıf nesneleri için arayüz üye elemanları private gibi davranmaktadır. Normal yöntemle bunu yapmak mümkün değildir.

Wednesday, December 12, 2012

Arayüz (Interface) Referansları (c#)


Arayüzler ile referans oluşturulabilir. Bir arayüz referansı tek başına bir anlam ifade etmez. Ancak arayüz
referanslarına kendisini uygulayan herhangi bir sınıf nesnesinin referansı atanabilir. Bu durumda arayüz
referansı ile arayüzde bulunan metot ya da özellikler hangi sınıf referansı tutuluyorsa o sınıf türünden bir
nesne için çağırılabilir.
Bu özelliğine örnek vermek gerekirse aşağıda ArayuzRef arayüzünü uygulayan iki sınıfın bildirimini görüyoruz.
Main() metodu içinde ise ArayuzRef referansına bu iki sınıfın nesne referanslarının nasıl aktarıldığını ve bu
referans üzerinden sınıflardaki metotların nasıl çağrıldığını görüyoruz.

using system;

interface ArayuzRef
{
  void metot1();
}

class Sinif1 : ArayuzRef
{
  puplic void metot1(){
  Console.WriteLine("Ben Sinif1'in metoduyum");
  }
}

class Sinif2 : ArayuzRef
{
  puplic void metot1(){
  Console.WriteLine("Ben Sinif2'nin metoduyum");
}

puplic class MainMetodu
{
  puplic static void Main()
  {
    ArayuzRef a;

Sinif1 sinif1 = new Sinif1();
Sinif2 sinif2 = new Sinif2();

a = sinif1;
a.metot1();

a = sinif2;
a.metot1();
   }
}

Programı derleyip çalıştırdığımızda ekrana

Ben Sinif1'in metoduyum
Ben Sinif2'nin metoduyum

yazacaktır. Arayüzlerdeki referans aktarma işlemi ile kalıtımda gördüğümüz temel sınıf referansına türeyen sınıf referansı aktarma işlemi ile aynıdır.

Monday, December 10, 2012

Arayüzlerin (Interface) Uygulanması (c#)


 Şimdi bir sınıfın belirlediğimiz bir arayüzün nasıl uygulandığını inceleyeceğiz.
Arayüzlerin uygulanması, sınıfların türetilmesi ile aynı şekilde yapılır. Arayüz uygulamada, arayüzler türetmedeki temel sınıf yerine geçer. Buna göre IArayüz'ü uygulayan Sayılar sınıfı aşağıdaki gibi bildirilir.

class Sayılar : Iarayuz
{
  //uygulanacak elemanlar
}

Sayılar sınıfı bu şekilde IArayuz'den türetildiğinde IArayuz'deki bütün üye elemanları uygulanmalıdır.

Buna göre Sayılar sınıfı IArayuz'ü ile aşağıdaki gibi bildirilebilir.

interface IArayuz
{
 int BirSonraki();
 void Sıfırla();

 int Deger
 {
  get;
  set;
 }

 int this [this indeks]
 {
 get;
 }
}

class Sayılar : IArayuz
{
 puplic int BirSonraki()
 {
   //metot gövdesi
 }

puplic void Sıfırla()
{
  //metot gövdesi
}

puplic int Deger
{
get
{
  //get bloğu
}

set
{
 //set bloğu
}
}

puplic int this[this indeks]
{
get
{
  //get bloğu
}

set
{
 //set bloğu
}
}
}

 Sınıflar arasında çok türetme olmamasına rağmen sınıflar birden fazla arayüzüde uygulayabilir. Uygulanacak
arayüzler virgül ile belirtilir. Örneğin IDisposable ve System.Collecitons isim alanında bulunan IEnumarable
yüzünü uygulayan sayılar sınıfı aşağıdaki gibi bildirilebilir.

using System;
using System.collections;

class Deneme : IDisposable, IEnumerable
{
  //Sınıf elemanları
}

Bir arayüzdeki elemanlar içsel olarak puplic olduğu için arayüzü uygulayan sınıfın arayüzdeki elemanları puplic
olarak bildirilmemelidir.

Bir arayüzü uygulayan sınıfın, sadece arayüzdeki elemanlara sahip olabileceği anlamına gelmez. Aynen türetmede
olduğu gibi arayüzdeki elemanların dışında istenildiği kadar yeni eleman eklenebilir.

Sınıflar birbirlerinden nasıl türetilebiliyorsa Arayüzler de birbirlerinden türetilebilir. Temel arayüzdeki bütün
elemanlar türeyen arayüze aktarılır. Böylece istediğimiz kadar eski arayüzü kullanarak daha geniş arayüzleri
oluşturabiliriz. Aşağıda iki arayüzün türetilmesine ilişkin bir örnek verilmiştir.

interface TemelArayuz
{
 void Metot1();
}

interface TureyenArayuz : TemelArayuz
{
  void Metot2();
}

Arayüzden yeni bir Arayüz türetildiğinde dikkat edilmesi gereken hususlar:

Bu kullanım ile TemelArayuz'ü uygulayan bir sınıf sadece Metot1'i uygulamalı iken TureyenArayuz'ü uygulayan bir
sınıf hem Metot1() hem de Metot2()'yi uygulamalıdır. Aksi halde derleme hatası alınır. Sınıflardan farklı olarak
arayüzleri birden fazla arayüz ile türetebiliriz. Örneğin aşağıdaki Arayuz3 bildirimi tamamen geçerlidir.

interface Arayuz1
{
  void Metot1();
}

interface Arayuz2
{
  void Metot2();
}

interface Arayuz3: Arayuz1, Arayuz1
{  void Metot3();
}

Arayüzleri türetirken new anahtar sözcüğü kullanılarak temel arayüzdeki bir eleman gizlenebilir. Bu şekilde
türeyen arayüzde temel arayüzdeki bir elemanla aynı isimli eleman bildirilebilir.

interface Arayuz1
{
  void Metot1();
}
interface Arayuz2 : Arayuz1
{
 new void metot1();
}

Peki bu durumda sadece Arayuz2'yi uyguluyan bir sınıfta Metot1() metodu uygululandığında geçerli bir bildirim olur mu?
 Hayır, çünkü Arayüz1'deki Metot1() metodu gizlenmiş olsa da kalıtım yolu ile Arayuz2'ye aktarılmıştır. Bu yüzden Arayuz2'yi uygulayan bir sınıf hem Arayuz1.Metot1() hem de Arayuz2.metot1() metodunu uygulamak zorundandır. Bunun için Arayuz_adı.Metot_adı ile hangi arayüzdeki metodu uyguladığımızı bildirmeliyiz. Örneğin;

class Deneme: Arayuz2
{
  void Arayuz1.Metot1();
  {
  }

  void Arayuz2.Metot1();
  {
  }
}

Deneme sınıfından bir nesne üzerinden Metot1() metoduna erişmemiz mümkün değildir, çünkü

deneme d= new deneme();
d.Metot1();

deyimiyle hangi arayüze ilişkin metodun çağrıldığı belirsizdir. Bu yüzden yukarıdaki gibi bir kullanım hatalıdır.

O halde Arayuz1.Metot1() ve Arayuz2.Metot1() metotları sadece Deneme sınıfında aşağıdaki gibi tam yolu
belirtilerek kullanılabilir.

void Arayuz2.Metot1()
{
   Arayuz1.Metot1();
}