Ini adalah pertanyaan sintaks. Saya memiliki kelas generik yang mewarisi dari kelas dasar generik dan menerapkan batasan ke salah satu parameter tipe. Saya juga ingin kelas turunan untuk mengimplementasikan antarmuka. Untuk kehidupan saya, saya tidak bisa menemukan sintaks yang benar.
Inilah yang saya miliki:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... }
Hal pertama yang terlintas dalam pikiran adalah ini:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... }
Tapi itu tidak benar karena itu menyebabkan T2 perlu mengimplementasikan IBar dan IFoo, bukan DerivedFoo untuk mengimplementasikan IFoo.
Saya sudah mencoba sedikit Googling, penggunaan titik dua, titik koma, dll, tapi ternyata saya kekurangan. Saya yakin jawabannya sederhana saja.
c#
generics
inheritance
interface
constraints
Dan Rigby
sumber
sumber
Jawaban:
Anda menyertakan seluruh tanda tangan kelas Anda sebelum Anda menentukan batasan umum.
sumber
where T2 : IBar, IFoo
hanya berartiT2
harus mengimplementasikan kedua antarmuka alih-alihDerivedFoo<T1,T2>
menerapkanIFoo
Rekomendasi saya: ketika Anda memiliki pertanyaan tentang sintaks bahasa C #, baca spesifikasinya; itulah mengapa kami mempublikasikannya. Anda pasti ingin membaca bagian 10.1.
Untuk menjawab pertanyaan spesifik Anda, urutan hal-hal dalam deklarasi kelas adalah:
Semua yang ada di daftar itu opsional kecuali untuk "kelas", nama, dan isi, tetapi semuanya harus muncul dalam urutan itu jika muncul.
sumber
sumber
Ini adalah perpanjangan dari jawaban yang ada. Ini defaultnya
string
jika Anda tidak memberikan tipe. Saya tidak menerapkan antarmuka tetapi itu seharusnya tidak memerlukan sesuatu yang berbeda dari biasanya.sumber