根据项目引用的库的编译条件

本文关键字:条件 编译 引用 项目 | 更新日期: 2023-09-27 18:24:13

我有两个项目和一个可移植库。两个项目都引用了此库。有没有什么方法可以让库为两个项目中的每一个提供方法的两种不同实现?

例如,项目是Server和Client,库有一个类,该类具有一个名为SendItem的方法。

服务器对SendItem:的实现

Send(ID);
Send(Name);
Send(Price);

客户对SendItem:的实施

Send(ID); //Server will retrieve rest of information from database

我宁愿不使用额外的参数来指示哪个项目正在调用该方法,因为这个方法被许多类调用,事情会变得丑陋和复杂。有没有什么方法可以使用编译条件来实现这一点?(是否可以为引用库的每个项目多次编译库?)。

如果使用编译条件无法实现这一点,那么有没有什么干净的方法可以做到这一点而不会弄乱其他事情?

根据项目引用的库的编译条件

查看服务定位器或控制反转(IoC)模式。Daniel写了一篇关于如何将其应用于便携式库的文章:http://blogs.msdn.com/b/dsplaisted/archive/2012/08/27/how-to-make-portable-class-libraries-work-for-you.aspx.

你可以用C#预处理器指令做这样的事情,类似于在C/C++中做的方式,但用这种方式编写的代码更难维护,而且随着时间的推移会变得更脆。最好写几个不同的函数,而不是用来打乱代码

#if (ANYTHING)
  Console.WriteLine("ANYTHING is defined");
#else
  Console.WriteLine("ANYTHING is NOT defined");
#endif

你明白了。

以下是对MSFT预处理器信息的引用,以便您可以阅读:http://msdn.microsoft.com/en-us/library/ed8yd1ha(v=vs.71).aspx