Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#项目:对象交叉使用_C#_.net_Reference_Namespaces - Fatal编程技术网

C#项目:对象交叉使用

C#项目:对象交叉使用,c#,.net,reference,namespaces,C#,.net,Reference,Namespaces,在一个解决方案中有两个项目:MyServer和MyClient。希望使用消息类的对象,该对象位于两个项目中(分别为MessageServer和MessageClient)。 我将客户机的引用添加到服务器项目中,但无法执行相反的操作,因为我得到错误“…将导致循环依赖”。所以我有 using TestMyClient; namespace TestMyServer { public class MessageServer { 在服务器端,然后在代码=newxmlserialize

在一个解决方案中有两个项目:MyServer和MyClient。希望使用消息类的对象,该对象位于两个项目中(分别为MessageServer和MessageClient)。 我将客户机的引用添加到服务器项目中,但无法执行相反的操作,因为我得到错误“…将导致循环依赖”。所以我有

using TestMyClient;

namespace TestMyServer
{
    public class MessageServer
    {
在服务器端,然后在代码
=newxmlserializer(typeof(TestMyClient.MessageClient))中使用它

我想要同样的,但是在客户端。遗憾的是,我无法使用
名称空间将
TestMyServer
作为
输入,因此我无法引用
MessageServer


如何交叉使用这些类?

您的问题不清楚-不清楚为什么您希望有两种不同的类型-但答案是在服务器和客户端项目都引用的命名空间中有一种类型

Server     Client
   \        /
    \      /
     Common
没有循环依赖,只有一种共享类型,每个人都很高兴


如果您实际需要两种消息类型(例如,一种用于请求,另一种用于响应),那么在公共项目中定义这两种消息。不过,我建议您不要将它们称为
MessageServer
MessageClient
——这两条消息都将由服务器和客户端使用,因为一条消息将生成它,另一条消息将使用它。使用请求和响应的术语通常要清楚得多。

一般来说:如果您有两个“东西”依赖于另一个的功能(循环依赖),那么将公共功能提取到第三个东西中。让两个现有事物都引用第三个新事物

当这些东西是类时,例如
MessageServer
MessageClient
,然后将公共功能提取到
Message
类中,并让原来的两个类从新类派生


当这些东西是项目时,例如
AwesomeServer
AwesomeClient
,然后将公共功能(例如
Message
类)提取到一个新的
Awesome
项目中,并让原来的两个项目引用新项目。

好的,使用公共对象很有意义。谢谢。:)但如果我将来需要在其他情况下应用交叉使用该怎么办。那么我可能会陷入同样的问题?