Jika kita berasumsi bahwa tidak diinginkan untuk kelas dasar untuk menjadi kelas antarmuka murni, dan menggunakan 2 contoh dari bawah, yang merupakan pendekatan yang lebih baik, menggunakan definisi kelas metode abstrak atau virtual?
Keuntungan dari versi "abstrak" adalah bahwa ia mungkin terlihat lebih bersih dan memaksa kelas turunan untuk memberikan implementasi yang penuh harapan.
Keuntungan dari versi "virtual" adalah dapat dengan mudah ditarik oleh modul lain dan digunakan untuk pengujian tanpa menambahkan banyak kerangka dasar seperti yang dibutuhkan versi abstrak.
Versi Abstrak:
public abstract class AbstractVersion
{
public abstract ReturnType Method1();
public abstract ReturnType Method2();
.
.
public abstract ReturnType MethodN();
//////////////////////////////////////////////
// Other class implementation stuff is here
//////////////////////////////////////////////
}
Versi Virtual:
public class VirtualVersion
{
public virtual ReturnType Method1()
{
return ReturnType.NotImplemented;
}
public virtual ReturnType Method2()
{
return ReturnType.NotImplemented;
}
.
.
public virtual ReturnType MethodN()
{
return ReturnType.NotImplemented;
}
//////////////////////////////////////////////
// Other class implementation stuff is here
//////////////////////////////////////////////
}
return ReturnType.NotImplemented
? Serius? Jika Anda tidak dapat menolak jenis yang tidak diterapkan pada waktu kompilasi (Anda dapat; menggunakan metode abstrak) setidaknya melemparkan pengecualian.