Meskipun banyak jawaban lain yang benar di tingkat semantik, saya merasa menarik untuk juga mendekati pertanyaan-pertanyaan semacam ini dari tingkat rincian implementasi.
Antarmuka dapat dianggap sebagai kumpulan slot , yang berisi metode . Ketika sebuah kelas mengimplementasikan sebuah antarmuka, kelas tersebut diperlukan untuk memberi tahu runtime bagaimana mengisi semua slot yang diperlukan. Kapan kamu berkata
interface IFoo { void M(); }
class Foo : IFoo { public void M() { ... } }
kelas mengatakan "ketika Anda membuat instance dari saya, isikan referensi untuk Foo.M di slot untuk IFoo.M.
Kemudian saat Anda melakukan panggilan:
IFoo ifoo = new Foo();
ifoo.M();
kompiler menghasilkan kode yang mengatakan "tanyakan objek metode apa yang ada di slot untuk IFoo.M, dan panggil metode itu.
Jika sebuah antarmuka adalah kumpulan slot yang berisi metode, maka beberapa slot itu juga bisa berisi metode get and set dari properti, metode get and set dari pengindeks, dan metode tambah dan hapus acara. Tapi lapangan bukan metode . Tidak ada "slot" yang terkait dengan bidang yang dapat Anda "isi" dengan referensi ke lokasi bidang. Dan karena itu, antarmuka dapat mendefinisikan metode, properti, pengindeks dan peristiwa, tetapi tidak bidang.