C# 基于语言的条件代码?

C# 基于语言的条件代码?,c#,unsafe,C#,Unsafe,我正在为C#写一个图书馆。我想知道,如果库正在C#项目中使用,那么是否可以只提供方法/字段,如果库正在另一种.NET语言(如Visual Basic)中使用,那么这些方法将无法访问。这是因为有些函数/字段只对不安全的代码有用,如果它们对Visual Basic不起作用,那就有点傻了 根据使用的语言,是否可以只提供某些类/方法/字段?如果没有,我可以很容易地下载两个独立的程序集,即一个用于C#,另一个用于VB.Net。或者,我可以简单地包括额外的方法(但我想避免与那些不熟悉指针和不安全代码的人混淆

我正在为C#写一个图书馆。我想知道,如果库正在C#项目中使用,那么是否可以只提供方法/字段,如果库正在另一种.NET语言(如Visual Basic)中使用,那么这些方法将无法访问。这是因为有些函数/字段只对不安全的代码有用,如果它们对Visual Basic不起作用,那就有点傻了

根据使用的语言,是否可以只提供某些类/方法/字段?如果没有,我可以很容易地下载两个独立的程序集,即一个用于C#,另一个用于VB.Net。或者,我可以简单地包括额外的方法(但我想避免与那些不熟悉指针和不安全代码的人混淆,只是为了防止用户在不安全的方法中胡闹,不小心做了一些愚蠢的事情,但我想这真的不重要!)

谢谢

根据使用的语言,是否可以只提供某些类/方法/字段

没有

我想避免与那些不熟悉指针和不安全代码的人产生混淆,只是为了防止用户在不安全的方法中胡闹,不小心做了一些愚蠢的事情

使用抽象。创建一个带有接口/基类的程序集,并将该程序集与具有安全实现的另一个程序集一起提供给某些使用者,将该程序集与公开高级功能的另一个程序集一起提供给其他使用者


或者,您可以将一个程序集与内部方法一起使用,如果您知道哪些“高级”程序集将使用它,则可以使用InternalsVisibleToAttribute。

据我所知,无法确定调用您的程序集的程序集语言,因为到那时,每个人都在谈论IL(或者更确切地说是编译指令,但不管怎样)

我认为在这种情况下,最好的办法是根据条件编译两个不同版本的程序集,并根据用户使用的语言向用户提供。或者,您可以包含所有代码,并告诉VB用户不要访问某些功能


我必须承认,我不确定您在这里做什么会向调用者暴露不安全的东西;一些
IntPtr
或其他什么?

我不知道不安全的上下文与使用另一种.NET语言的程序集有什么关系。只是出于好奇,我是否遗漏了什么(很可能…)?没有办法完成要求的任务。我提供了一个替代方案-提供不同的程序集(一个API降低的程序集)对于不同的客户端,这取决于客户端的信任程度,而不是它们使用的.NET语言。哦,不,我意识到了。我想问的是,不安全的上下文会使程序集无法被其他.NET语言使用(正如OP所想的那样)?@EdS。我不认为不安全的代码会使我的程序集被其他语言无法使用。我只是想知道是否可以指定某些程序集成员是否可以在某些语言中使用。在我的一些类中,有些函数和字段在C#之外的其他语言中是无用的,但这真的没关系,我我只是想看看这是否可行。:)不安全代码不符合CLS,这意味着您将无法从VB.Net调用它。我不知道F。因此,您只会阻止使用C++的管理人员使用指针。这似乎有点多余。你的目标是什么?界面。接口。接口.-)