在接收类处理之前,请在基类中修改构造函数参数



我的程序生成了包含多个字段的特定消息。我需要从字符串中还原消息,其中每个字段表示为新行。有一个具有逻辑的类(MailServiceContent),用于主字段和其他类(示例:SendMailServiceContent),其中包含其他字段的逻辑。我以下方式恢复消息的整个过程:基本构造函数从字符串中处理主字段(主字段线的数量不是恒定的,可以是3或4),接下来是混凝土构造器(在SendMailServiceContent的示例构造函数)处理更多行。混凝土构造函数是否有可能使用截断的主字段线获取参数字符串数据,以便可以对其进行处理?或Meaby还有另一种"好"方法来处理这种情况,除了在基类中制作方法,该方法将返回已处理的线路数量并在混凝土类中加入线(这在"更深的"继承中会出现问题)

class MailServiceContent
{
    ...
    public enum Message_Type
    {
        SEND_MAIL = 1,
        RECEIVE_MAIL = 2,
        RECEIVE_MAIL_PERIODIC = 3,
        UNREGISTER_USER = 4,
        RESPONSE_WITH_USER_ID = 5,
        RESPONSE = 6
    };
    public MailServiceContent(string data){
        //restore main part from string
    }
    public static MailServiceContent Create(byte[] data){
        string decodedData = Encoding.UTF8.GetString(data);
        Message_Type messageType;
        using (StringReader stringReader = new StringReader(decodedData))
        {
            messageType = (Message_Type)int.Parse(stringReader.ReadLine());
        }
        switch (messageType)
        {
            case Message_Type.SEND_MAIL:
                return new SendMailServiceContent(decodedData);
            case Message_Type.RECEIVE_MAIL_PERIODIC:
                return new PeriodicReceiveMailServiceContent(decodedData);
            case Message_Type.RESPONSE_WITH_USER_ID:
                return new ResponseMailServiceContent(decodedData);
            case Message_Type.RESPONSE:
                return new ResponseWithIDMailServiceContent(decodedData);
            default:
                return new MailServiceContent(decodedData);
        }
    }
}
class SendMailServiceContent: MailServiceContent
{
    ...
    public SendMailServiceContent(string data):base(data){
        //restore further part from string
    }
}
...

在为什么在构造函数中这样做的点旁边,是的,这是可能的。您只需在基类中具有一些逻辑,然后在继承类中拥有更多逻辑。他们每个人都会完成工作的一部分。例如,这是一个简单的应用程序。它从列表中的4个字符串开始,该列表传递给BB继承A。因此,A将首先做一些工作:将5添加到列表中。然后B将做一些工作:将6添加到列表中。最后,您将在列表中有6个项目。

class Program {
   static void Main(string[] args) {
         var items = new List<string> { "1", "2", "3", "4" };
         B b = new B( items);
         foreach( var item in items ) {
            Console.WriteLine( item );
         }
         Console.Read();
   }
}
public class A {
   public A(List<string> data) {
      data.Add( "5" );
   }
}
public class B : A {
   public B(List<string> data) : base(data) {
      data.Add( "6" );
   }
}

构造函数的作用是基于您的代码。如果您只想进行一部分处理,则只为该部分编写代码。

最新更新