标题起的不好,因为不知道如何概括描述,抱歉。具体问题是,现在的socket server程序,由于工程上的非技术原因,需要支持两种相近但不相同的自定义协议,这两种协议有部分数据类型定义不一致,但对协议数据的后续处理是一样的,因此我希望能在一个工程中包含对这两种协议的支持,通过不同的编译选项(或类似功能)发布不同的版本。请问在C#里该如何实现?多谢了!

解决方案 »

  1.   

    可以使用编译选项#if 协议1#else#endif或者利用配置文件,设定
      

  2.   

    首先,你需要一个接口,例如IData,里面有你需要不同实现的方法,例如ReadData,
    然后,有多少种不同的实现就添加多少个类,例如Process1, Process2,都实现IData接口。
    调用时,根据配置,创建具体的实例,例如if (...) IData d = new Process2(); d.ReadData();
      

  3.   

    在app.config 文件里加入configuration>
        <appSettings>
            <add key="协议" value="协议一" />
        </appSettings>
    </configuration>
    程序里可以通过string strpro =ConfigurationManager.AppSettings["协议"];获取
      

  4.   

    抛砖引玉:
    假设你协议1的读取和处理使用类1,协议2的使用类2
    在配置文件里配置<add key="协议1" value="filename.namespace.类1" /><add key="协议2" value="filename.namespace.类2" />
    <add key="协议" value="协议1" />然后在程序中使用反射加载不同的类,进行具体的操作
    这样就不需要修改代码,可以直接修改配置达到你的目的后续改进:使用接口IProtocol,具体的协议操作类继承此接口,配置改写成
    <add key="IProtocol" value="filename.namespace.协议类1" />
    同样通过反射实例化接口,这样就可以根据不同的配置加载不同的实例,但是接口是一致的如果不希望把协议一和协议二的处理类写到一起,就把协议一盒协议二的处理类,分别做成不同的dll文件
    用的时候动态加载就好了