Di C #, kode berikut ini valid
interface I{
int property{get;set;}
}
Itu tidak masuk akal bagi saya. Hal ini tampaknya mematahkan salah satu prinsip antarmuka yang paling penting: kurangnya negara (dengan kata lain, tidak ada bidang). Bukankah properti membuat bidang pribadi implisit? Bukankah itu benar-benar buruk untuk antarmuka?
c#
interfaces
properties
Pasang kembali Monica
sumber
sumber
Jawaban:
Saya pikir bagian yang membingungkan adalah bahwa jika Anda menulis
int Property { get; set; }
di dalam kelas, maka itu adalah properti otomatis dengan bidang dukungan implisit.Tetapi jika Anda menulis hal yang persis sama dalam sebuah antarmuka, maka itu bukan properti otomatis , itu hanya menyatakan bahwa properti adalah bagian dari antarmuka dan bahwa semua jenis yang mengimplementasikan antarmuka harus mengandung properti itu (sebagai properti otomatis atau tidak ), tetapi tidak membuat bidang dukungan.
Salah satu cara untuk melihat perbedaannya adalah dengan menulis
int Property { get; }
: ini valid di antarmuka dan menyatakan properti yang hanya memiliki pengambil, tetapi tidak ada penyetel. Tetapi itu tidak akan dikompilasi di kelas (kecuali jika Anda menggunakan C # 6.0), karena properti otomatis harus memiliki setter.sumber
Mendefinisikan properti seperti yang Anda tunjukkan sama dengan mendefinisikan metode
int GetProperty()
danvoid SetProperty(int i)
. Properti sangat kuat di C #.Properti tidak secara implisit membuat bidang pribadi dalam C #. Itu adalah implementasi default dari
auto-property
, misalnyapublic string MyString { get; set;}
- properti yang mendefinisikan logika kustom dalamget
metode tidak menghasilkan bidang pribadi implisit.Terakhir, karena antarmuka berkaitan dengan API publik , apa bedanya jika implementasi properti antarmuka bergantung pada bidang pribadi - tersirat atau tidak? Itu tersembunyi dari konsumen antarmuka terlepas.
sumber
Properti adalah metode! Bidang dukungan akan ditambahkan ke kelas yang mengimplementasikan antarmuka (baik secara manual atau melalui properti otomatis).
sumber