c# 如何实现该功能?(请见正文) 标题起的不好,因为不知道如何概括描述,抱歉。具体问题是,现在的socket server程序,由于工程上的非技术原因,需要支持两种相近但不相同的自定义协议,这两种协议有部分数据类型定义不一致,但对协议数据的后续处理是一样的,因此我希望能在一个工程中包含对这两种协议的支持,通过不同的编译选项(或类似功能)发布不同的版本。请问在C#里该如何实现?多谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以使用编译选项#if 协议1#else#endif或者利用配置文件,设定 首先,你需要一个接口,例如IData,里面有你需要不同实现的方法,例如ReadData,然后,有多少种不同的实现就添加多少个类,例如Process1, Process2,都实现IData接口。调用时,根据配置,创建具体的实例,例如if (...) IData d = new Process2(); d.ReadData(); 在app.config 文件里加入configuration> <appSettings> <add key="协议" value="协议一" /> </appSettings></configuration>程序里可以通过string strpro =ConfigurationManager.AppSettings["协议"];获取 抛砖引玉:假设你协议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文件用的时候动态加载就好了 c#无法找到dll的入口点 反射 真他娘的难啊 在前台onunload事件中怎样调用后台的方法 窗体关闭问题(顶者有分) 本群(290836527)走精兵綫路!不再招新手。希望提高技術的1年以上.NET技術的朋友加入 启动visual studio2008打开的却是用户控件测试容器 在线请教~WinForm 孟哥救命呀 太难拉 DataGrid问题 菜鸟的问题关于枚举 hwo to access Webservice through a Proxy? C# cmd返回信息 关于C#多线程问题
然后,有多少种不同的实现就添加多少个类,例如Process1, Process2,都实现IData接口。
调用时,根据配置,创建具体的实例,例如if (...) IData d = new Process2(); d.ReadData();
<appSettings>
<add key="协议" value="协议一" />
</appSettings>
</configuration>
程序里可以通过string strpro =ConfigurationManager.AppSettings["协议"];获取
假设你协议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文件
用的时候动态加载就好了