在C#中使用具有“递归”关系的泛型 - c#

我正在尝试在C#中实现主/从关系(基本上,一个主具有一个从属列表,每个从属只有一个主控),而在Java中,我可以这样做:

class Master<S extends Slave> {

}

class Slave<M extends Master> {

}

但是,C#中有一个等效的习惯用法:

class Master<S> where S:Slave {

}

class Slave<M> where M:Master {

}

不编译,因为它要求我在where条件上使用泛型,而且我不知道如何指定此确切类型;如何才能做到这一点?

此外,如何实现既是集合的主控又是从属到另一个主控的从属的类(因为C#和Java,因此没有多重继承)?

就像是:

class MasterSlave<M,S>: Master<M>, Slave<S> {

}

谢谢

参考方案

class Master<M, S> where S : Slave<S, M> where M : Master<M, S>

在C#中实现Comet服务器 - c#

我想知道是否可以用C#编写彗星服务器。我有一个C#代码,可以定期生成数据,我想将这些数据推送到Java应用程序。所以想将我的C#代码转换为彗星服务器。还想知道是否有实现的彗星服务器,使我们可以将C#应用程序和java应用程序连接到它,以便C#应用程序可以通过彗星服务器将信息传递给java应用程序。数据推送频率会很高,但是单个消息的大小非常小:字符串值。 参考…

在C#.Net中找到工作项目目录 - c#

我用过Directory.getCurrentDirectory();它只给C:\ Windows \ SysWOW64但是我需要获取Visual Studio默认项目文件夹,我该如何获取?例如:C:\ Users \ knallasi \ Documents \ Visual Studio 2010 \ Projects \ SampleApp我们如何在项…

在C#中,基本构造函数调用中的一种用法如何解决多个枚举警告? - c#

以下代码向我警告了IEnumerable可能的多个枚举:public ClassName(IEnumerable<OtherClassName> models) : base(models) { _models.AddRange(models); } 由于“基本”调用,消除此警告的常规解决方案不起作用。我无法转换为列表,因为没有地方可以存储该列表…

在C#中,如果关联的catch块引发异常,是否可以强制控制通过finally块? - c#

我知道在Java中,如果catch子句捕获了异常,并且其catch块引发了异常,则控制将在线程终止之前传递与关联的finally块(如果有)。但是,在C#中似乎并非如此。可以通过在try-catch语句的try块中放入try-finally语句和引发异常的catch块,来在C#中几乎反映出这种行为,但是,例如,如果finally块应该包含处理应记录异常的St…

在C#中使用Web服务-List - c#

score#UPDATED#这听起来似乎很愚蠢,但是我已经在这个问题上停留了三天了!我是C#的新手。我正在尝试在C#中使用Web服务。我使用以下代码行成功使用了Java中的Web服务: List x = new ArrayList<Score>(); x = topScores(); System.out.println("x"…