由于接口(interface)不能包含实现,在我看来这会导致从接口(interface)继承的类中出现代码重复。在下面的示例中,假设设置从 Stream 读取的前 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 使用抽象基类并添加非抽象成员是一种解决方案。但是,如果我真的非常想改用接口(interface)怎么办?
最佳答案
在这种情况下,您可能希望同时使用接口(interface)和抽象基类。
你会同时拥有两者的唯一原因是因为另一个类不会共享抽象基代码但会尊重接口(interface)。考虑:
public interface IDatabaseProcessor {
void ProcessData(Stream stream);
}
public abstract class AbstractDatabaseProcessor : IDatabaseProcessor {
public void ProcessData(Stream stream) {
// setting up logic to read the stream is not duplicated
}
}
public class SqlServerProcessor : AbstractDatabaseProcessor {
//SqlServerProcessor specific methods go here
}
public class DB2Processor : AbstractDatabaseProcessor {
// DB2Processor specific methods go here
}
public class NonSharedDbProcessor : IDatabaseProcessor {
void ProcessData(Stream stream) {
// set up logic that is different than that of AbstractDatabaseProcessor
}
}
语法可能有点不对,我不是普通的 C# 用户。我是通过OOP标签来的。
关于c# - 如何避免重复的接口(interface)代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12063080/