在 .NET 语言之间共享类方法

Posted

技术标签:

【中文标题】在 .NET 语言之间共享类方法【英文标题】:Sharing class methods inbetween .NET languages 【发布时间】:2014-01-20 21:39:14 【问题描述】:

我和我的两个朋友正在一起从事一个编程项目,但仍然分开,我想补充一点,我们都是编程新手。现在我们都将用不同的语言编写相同的应用程序,因为我们都是用不同的语言自学的。我将使用 C# 编写应用程序,朋友 1 将使用 C++/CLI 编写它,而朋友 3 将使用 Java(或 J#)编写它。

现在我们要制作的应用程序将是一个“纸牌游戏引擎”。它将是一个能够加载和玩不同类型的标准西方 52 张纸牌游戏的应用程序,例如扑克或二十一点等。这个实际的应用程序我们将单独编写,但我们想要加载实际的“纸牌游戏” “作为外部模块,我猜我们会为此制作单独的程序集?现在我们的要求之一是这些“纸牌游戏”模块应该能够跨语言,我的意思是我应该能够使用我的“BlackJack C# 模块”并将其加载到他的“C++”中版本”的游戏引擎,反之亦然。

所以我有两个问题

    这甚至可能吗?据我了解,所有 .NET 语言都可以在相同的解决方案下编译吗?如果我们将“模块”编写为程序集,那么它们应该能够访问某些方法,反之亦然,还是我错了? 既然朋友 2 实际上并不是使用 .NET 语言进行编程,那么是否有一种简单的方法可以制作适用于此的 Java 解决方案?他是否可以将“纸牌游戏”模块编写为 DLL,然后我们可以将其导入到我们单独的项目中?或者他用 J# 编写应用程序会更容易吗?

【问题讨论】:

看看我们打开的蠕虫罐头。哎呀! J#?什么? (还有为什么?)它不是早就死了吗? 【参考方案1】:

我想补充一点,我们都是编程新手。现在我们都将用不同的语言编写相同的应用程序,因为我们都是用不同的语言自学的。

这句话的答案很简单:不要。甚至不要考虑这样做。选择一种语言并坚持下去。

所以我有两个问题 1)这甚至可能吗?据我了解,所有 .NET 语言都可以在相同的解决方案下编译吗?如果我们将“模块”编写为程序集,那么它们应该能够访问某些方法,反之亦然,或者我在这里错了吗?

您可以使用跨语言交流工具,但这需要学习一些非常高级的东西。

2) 由于朋友 2 实际上并不是在使用 .NET 语言进行编程,因此有没有一种简单的方法可以制作适用于此的 Java 解决方案?他是否可以将“纸牌游戏”模块编写为 DLL,然后我们可以将其导入到我们的单独项目中?还是让他用 J# 编写应用程序更容易?

再说一遍,不要。你让事情变得比他们应该做的要困难得多。您不能将 JNI 或 JNA 与 NET wiki 一起使用,并轻松地将它们与 Java 相结合。由于您都是编程新手,再次选择通用标准并坚持使用它们会更好。即使您对编程并不陌生,但最好还是这样做。

请注意,我做过一些跨语言程序,但不是自愿的,只是因为我不得不这样做。这些都是简单的事务,信息使用标准输入和输出(套接字)作为文本传递。我还使用 JNA 创建了可以调用用 C 创建的程序的 Java 程序,但是这又一次充满了许多技巧和陷阱,其中一些我已经陷入了,如果可以避免的话,再次不推荐这条路线。同样,您不能让 Java 以这种方式与 .NET 语言进行通信。

更高级别的进程间通信的其他选项包括使用Remote Procedure Call Library,其中有很多,但也会为您的程序增加额外的不必要的复杂性。

【讨论】:

这应该只是一个评论,因为它不是试图回答这个问题。 @Servy:我不是为了积分,而是把它变成了一个社区维基,这意味着我不会投赞成票和反对票,也让其他人更容易做出贡献和编辑。所以如果你愿意,请编辑和改进它。 CW 无法提供 cmets 作为答案。这就是 cmets 的用途。 CW 提供的答案设计为来自许多不同来源的信息的组合,但事实并非如此,也没有任何迹象表明它应该如此。这是您的个人意见,而不是几个人的知识的汇总。它应该是评论,而不是答案。 @Servy:这个问题确实是在征求意见,无论如何都应该关闭。 @Servy - 虽然问题可以被视为主题,但我不认为这个答案是“高度自以为是”。即使对于经验丰富的开发人员/团队来说,人际协作和多语言项目也是非常困难的问题,因此尝试一次解决 3 个难题(包括学习新事物)听起来不是一个好主意。 (我会说它类似于“如何在数据库中存储纯文本密码” - 显然“不要”是意见,但它被认为是常识,因此不会被否决)。

以上是关于在 .NET 语言之间共享类方法的主要内容,如果未能解决你的问题,请参考以下文章

关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的解决方案(c++共享类库方案)

关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的解决方案(c++共享类库方案)

在 C++ 中虚拟基类的两个实现之间共享方法

Swift:在不相互继承的类之间共享方法和计算属性

java的全局变量都有哪些作用?

在客户端和服务器之间共享 GWT 类实现