3

这个问题更多是出于好奇,而不是项目要求或问题。

我有一个非 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

问题:我需要通过某种方式从跨语言项目中隐藏我的“打印”方法之一来避免编译时错误(允许 C# 项目调用所需的实现)。

感谢您的关注。

4

3 回答 3

3

像 VB.NET 这样的语言不会绕开标识符不区分大小写的基本语法规则。这并不难解决,您可以简单地用 C# 之类的区分大小写的语言编写一个小的静态适配器方法来进行调用。

public static class Interop {
    public static void Print2(SecurityService obj) {
        obj.PRINT();
    }
}

假设语言支持它,您可以通过使其成为扩展方法将其完全推到门垫下。当 jit 优化器完成时,不会有实际的运行时开销。

于 2011-03-12T17:30:01.977 回答
1

我建议您制作不符合 CLS 的方法/属性internal,然后制作另一个不符合 CLS 的类来调用这些东西并将该类标记为[CLSCompliant(false)]

于 2011-03-12T17:12:17.467 回答
1

我看不出尝试完成这项工作的意义。我的建议是首先避免这个问题并停止编写不合规的代码,特别是如果您计划支持不同的语言。您可以完全控制此处的模块,因此您实际上不需要任何花哨的技巧。

于 2011-03-12T17:15:39.957 回答