2012-03-12 69 views
3

我正在为C#编写一个库。我想知道如果只有在C#项目中使用库时才可以使用方法/字段,并且如果正在使用另一种.NET语言(如Visual Basic),则方法将无法访问。原因是因为有一些函数/字段只对不安全代码有用,如果它们对于Visual Basic可用(如果它们没有任何用途),它将会有点愚蠢。基于语言的条件代码?

根据所使用的语言,是否有可能只有某些类/方法/字段可用?如果没有,我可以轻松地拥有2个独立的程序集供下载,即一个用于C#,一个用于VB.Net。或者我可以简单地包括额外的方法(但是我想避免与不熟悉指针和不安全代码的用户混淆,只是为了防止用户搞乱不安全的方法并意外地做一些愚蠢的事情,但我想它真的没关系!)。

谢谢!

+0

不安全的代码不符合CLS,这意味着您将无法从VB.Net调用它。我不知道F#。所以你只会阻止托管C++的人使用你的指针。这似乎有点多余。你的目标是什么? – IanNorton 2012-03-12 22:29:30

+0

接口。接口。接口。 ;-) – 2012-03-12 22:41:44

回答

2

根据使用的语言,是否有可能只有某些类/方法/字段可用?

我想防止混淆那些谁不熟悉指针和不安全的代码,只是为了让用户使用不安全的方法乱搞,不小心做一些愚蠢的。

使用抽象。使用interfaces/base类创建一个程序集,并为一些消费者提供与另一个消费者一起使用安全实现和其他消费者将基本程序集与另一个消费者一起展示高级功能的程序集。

或者,如果您知道哪些“高级”程序集正在使用它,则可以使用一个带有内部方法的程序集并使用InternalsVisibleToAttribute。

+0

我不明白不安全的上下文与使用来自其他.NET语言的程序集有什么关系。出于好奇,我错过了什么(很可能......)? – 2012-03-12 22:25:16

+0

有没有办法做什么被问。我提供了一个替代方案 - 针对不同的客户端提供不同的程序集(一个API缩减),具体取决于客户端的可信度,而不是使用哪种.NET语言。 – 2012-03-12 22:30:18

+1

哦,不,我意识到这一点。我在问什么是不安全的上下文会导致一个程序集无法被其他.NET语言使用(如OP所认为的那样)? – 2012-03-12 22:36:00

0

据我所知,没有办法确定一个程序集调用你的一个程序的语言,因为到了发生的时候,每个人都在说IL(或者说编译指令,但不管)。

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

我必须承认我不确定你会在这里做什么,这将暴露不安全的东西给呼叫者;一些IntPtr的东西?

+0

IntPtr的是一个好主意。 – Alex 2012-03-12 22:32:11