C# 面向对象设计问题-抽象、派生/实现类型-用例场景
我没有OO设计的实际经验,因此我对以下问题采用的解决方案犹豫不决: 我必须处理来自N个不同来源、不同格式的网络文本文件,处理过程包括经典的读取、计算和插入数据库 我设计的解决方案是创建一个类,该类定义了与核心/文件格式无关的所有功能/行为,并根据给定类处理的文件类型,从后者创建派生类,其中每个派生类都包含适当的格式读取逻辑 所有文件都是通过File.ReadAllLines()读取的,不同之处在于将文件中的字段映射到主对象的变量中。为此,我在基类中定义了一个事件,该事件在File.ReadAllLines()之后调用,所有派生类都将其映射逻辑附加到继承的事件 但我知道这个解决方案在设计上是不正确的。首先,实例化基类没有意义,所以它应该是抽象的。我没有将其抽象化的原因是,所有派生对象的构造代码都是相同的,因此我将其定义为基本构造函数。我应该在抽象类中声明一个“Initialize”方法,并在每个派生类的构造函数中调用它吗?(看起来很奇怪……) 也许是接口?我不知道在这里使用接口会给我带来什么好处,而且它不会解决这个“构造函数”问题 正确的解决方案是什么 我的场景的代码演示:C# 面向对象设计问题-抽象、派生/实现类型-用例场景,c#,oop,abstract,C#,Oop,Abstract,我没有OO设计的实际经验,因此我对以下问题采用的解决方案犹豫不决: 我必须处理来自N个不同来源、不同格式的网络文本文件,处理过程包括经典的读取、计算和插入数据库 我设计的解决方案是创建一个类,该类定义了与核心/文件格式无关的所有功能/行为,并根据给定类处理的文件类型,从后者创建派生类,其中每个派生类都包含适当的格式读取逻辑 所有文件都是通过File.ReadAllLines()读取的,不同之处在于将文件中的字段映射到主对象的变量中。为此,我在基类中定义了一个事件,该事件在File.ReadAll
public delegate void myDelegate(object parameter);
class Base
{
#region Attributes
...
#endregion
public Base(object p)
{
//initialization code
...
}
#region Methods
protected void m1() { }
protected void m2() { }
...
#endregion
public event myDelegate myEvent;
}
class Child1
{
public Child1(object o) : base(o)
{
this.myEvent += new myDelegate(ChildMethod);
}
public void ChildMethod(object o)
{
...
}
}
首先,实例化基类没有意义,所以它应该是抽象的。我没有将其抽象化的原因是,所有派生对象的构造代码都是相同的,因此我将其定义为基本构造函数
您仍然可以使基类抽象,但在基类构造函数中有公共构造函数逻辑。我在你的代码中看到,你已经知道了如何;这就是你需要做的
abstract class Base {
public Base(object o) { }
public abstract void M();
}
class Derived : Base {
public Derived(object o) : base(o) { }
public override void M() { }
}
明白了。。。我甚至没有尝试它,因为我确信抽象类没有构造函数,因为它不会生成实例。。。但我现在只写了一个简单的测试,我错了。所以,是的,我可以让派生类型共享构造逻辑编码在基构造函数中,我需要的是在每个子构造函数中调用基构造函数。谢谢