这个问题更多是出于好奇而不是项目要求或问题。
我有一种语言的非CLS兼容代码(比如C#),我只需要用我当前的语言(跨项目,因此不能选择内部),并且同时使用它希望允许其他语言(比如VB)能够调用冲突的实现而不会产生编译时错误。
例如,
//C#
public class SecurityService
{
....
public void Print()
{
Console.WriteLine("print"); //This method prints Service Name in lower case
}
public void PRINT()
{
Console.WriteLine("PRINT");//This method prints service name in UPPER case.
}
}
'VB.Net
Module ServiceReader
Sub Main()
Dim service As New SecurityService()
service.print() 'Compile time error: print is ambiguos
End Sub
End Module
问题:我需要通过某种方式从交叉语言项目中隐藏我的一个“print”方法来避免编译时错误(允许C#项目调用所需的实现)。
感谢您的关注。
答案 0 :(得分:3)
像VB.NET这样的语言无法摆脱其基本语法规则,即标识符不区分大小写。要解决这个问题并不难,您可以简单地在一个区分大小写的语言中编写一个静态适配器方法,如C#进行调用。
public static class Interop {
public static void Print2(SecurityService obj) {
obj.PRINT();
}
}
假设语言支持,你可以将它作为一种扩展方法完全推到门垫下面。当jit优化器完成后,将没有实际的运行时开销。
答案 1 :(得分:1)
我建议您制作非CLS兼容的方法/属性internal
,但是然后创建另一个不符合CLS的类来调用那些东西并将类标记为[CLSCompliant(false)]
答案 2 :(得分:1)
我没有看到尝试使这项工作的重点。我的建议是首先避免这个问题并停止编写不合规的代码,特别是如果你打算支持不同的语言。你可以在这里完全控制模块,所以你实际上不需要任何花哨的黑客。