2010-07-20 59 views
0

看來,我在VB.NET中編寫的擴展方法庫存在問題。重載在類庫中的VB.NET擴展方法

我有2重載的擴展方法裁剪()。

當我從VB.NET項目中引用lib時,我看到它們。如果從C#項目中引用它,我看不到它們。

這到底是怎麼回事?

+10

地獄是什麼代碼? – Oded 2010-07-20 12:46:14

+0

VB或VB.NET?標記[vb]代表Visual Basic(版本5,6) – abatishchev 2010-07-20 13:10:34

+0

Plz測試場景以查看是否遇到同樣的問題。 – Tomasi 2010-07-20 13:56:57

回答

3

它的工作原理是這樣的:

  • 在C#中,當你調用一個方法與outref參數,編譯器會要求你重複的調用參數的outref關鍵字。這是因爲這個變量是否已經被初始化對於語言來說確實很重要。
  • 在VB.NET中,當您調用ByRef參數的方法時,編譯器不需要您在調用參數上重複ByRef,它只是爲您排序。這是因爲變量是否已經被初始化與語言無關。

因此,VB.NET可以很容易地解決使用ByRef擴展方法,因爲僅存在一種可能的方式中,它可以被調用。但是,C#不知道該怎麼辦,因爲沒有語法來告訴它是否使用outref來調用方法。

所有你能做的就是:

  • 重新寫你的擴展方法儘可能使用一個ByVal參數。
  • 如果這是不可能的,那麼你堅持從C#調用它們,就像正常的方法。
1

沒有看到代碼,我的猜測是您在C#.cs文件中缺少using聲明。

//other usings... 

//Extension using statement... 
using MyAssembly.Extensions; 

class Program { 
    static void Main() { 
    //some code 
    String myString = "blah"; 

    //call the extension method now 
    String newString = myString.MyExtensionMethod(); 
    } 
} 

但是,這只是一個猜測,沒有看到你的代碼。

希望這有助於!

0

我的方法使用了byref參數。我改變它爲VAL,它的工作。

顯然這很奇怪。在VB項目中確定,但在C#中沒有。顯然C#不支持帶有byref的擴展方法,或者它是一個錯誤。

+0

當你從c#調用方法時,你使用了ref關鍵字嗎? – 2010-07-20 14:16:37

+0

喲如何使用ref關鍵字?示例代碼? – Tomasi 2010-07-20 15:11:04