Consider an interface:
public interface IWindowOperations
{
// Some operation methods.
}
Class definitions:
public abstract class BaseWindow<T> : IWindowOperations { // partially implemented class. }
public class TraditionalWindow<T> : BaseWindow<T> { // Fully implemented class. }
public class ModernWindow<T> : BaseWindow<T> { // Fully implemented class. }
(1) is already marked as an abstract so it cannot be instantiated. (2) and (3) are fully implemented though they should not be instantiated, rather they should be derived by other class specifying <T>
so the application framework can register them.
e.g.
public class SliderWindow<Win8> : ModernWindow<Win8>
{
// In general case this is just an empty class
// unless special handling is needed.
}
In this case is it right to mark (2) and (3) as an abstract
? Those are just template defining some concrete functionality but also allows derived classes to override if required.