Поскольку интерфейсы не могут содержать реализацию, мне кажется, что это приводит к дублированию кода в классах, которые наследуются от интерфейса. В приведенном ниже примере сделайте вид, что, скажем, первые 10 или около того строк, которые устанавливают чтение из потока, дублируются. Попытайтесь не сосредоточиться на формулировке здесь, но вместо этого сосредоточьтесь на концепции того, насколько легко создавать дублирующий код между каждым классом.
Например:
public interface IDatabaseProcessor
{
void ProcessData(Stream stream);
}
public class SqlServerProcessor : IDatabaseProcessor
{
void ProcessData(Stream stream)
{
// setting up logic to read the stream is duplicated code
}
}
public class DB2Processor : IDatabaseProcessor
{
void ProcessData(Stream stream)
{
// setting up logic to read the stream is duplicated code
}
}
Я понимаю, что использование абстрактного базового класса для ProcessData и добавление не абстрактных членов - одно из решений. Однако, что, если я действительно, действительно хочу использовать интерфейс вместо этого?