为构造函数实现策略

wei*_*mat 1 c# constructor strategy-pattern

在C#中为模板/抽象类的构造函数实现策略的最佳方法是什么?我有几个类都基于解析构造函数中的字符串.解析是在静态方法中完成的,该方法创建键值对的列表,并且对于所有类都是通用的,但是某些字段对于所有类也是通用的 - 因此我使用抽象模板类.

问题是我没有看到继承抽象基类的构造函数实现的方法.否则,我会在基类中实现构造函数策略,并强制在一些抽象方法中处理列表.

编辑:添加模板类的不工作代码

public abstract class XXXMessageTemplate 
{
    public XXXMessageTemplate(string x) // implementation for the constructor 
   {
       Parse(x);//general parse function
       CommonFields();//filling common properties
       HandlePrivateProperties();//fill individual properties
       HandlePrivateStructures();//fill individual structures
    }
    abstract void HandlePrivateProperties();
    abstract void HandlePrivateStructures();
}

The actual messages should not implement any constructor and only implement the HandlePrivateProperties and HandlePrivateStructures functions.
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

如果您希望基类构造函数的逻辑在派生类中运行,您通常只需调用它:

 public Derived(...) : base(...)
 {
     // ...
 }
Run Code Online (Sandbox Code Playgroud)

基类可以在构造函数中调用抽象/虚方法,但由于派生类的构造函数体尚未执行,因此通常不赞成.(你想要真正强调这一点.)

这回答了你的问题了吗?我不完全确定我理解这个问题 - 一些伪代码会有所帮助.

编辑:派生类必须实现构造函数.构造函数不是继承的.如果未指定任何构造函数,编译器将提供无参数构造函数,该构造函数调用基本无参数构造函数.但是,您可以轻松编写具有相同签名的构造函数,并只调用基类构造函数:

public Derived(string x) : base(x)
{
    // Base constructor will do all the work
}
Run Code Online (Sandbox Code Playgroud)