2015-10-28 37 views
-1

我目前正在探索將VB.net和C#.net合併到同一個解決方案中的可能性,以期停止編寫VB.net代碼,並在後面的代碼中重構什麼被寫入C#。我對.net框架的理解表明,我可以使用另一種語言的類來擴展一種語言的類,但是我根本無法找到使其工作的方式。在C#中擴展VB.net類.net

作爲一個實體模型,我創建了一個VB.Net控制檯應用程序,看起來很像是:

Namespace CrossLanguage 

Module Module1 

    Sub Main() 

     Console.WriteLine("This is a test") 
     Console.ReadLine() 

     Dim x As New Test 

     x.WriteMeAnAnimal() 

    End Sub 

End Module 

Public Class Test 

    Sub WriteMeAnAnimal() 

     Console.WriteLine("An animal") 
     Console.ReadLine() 

    End Sub 

End Class 

End Namespace 

這個工作,而且也沒有真正的問題吧。我可以運行該應用程序,並在第一個ReadLine上,我可以提交我喜歡的任何內容,並出現「An animal」。現在,我接下來要做的就是創建一個新的C#項目,並創建一個類文件。我添加了一個項目引用指向VB.net項目(這是好的),但我根本無法獲得C#類地看到,VB類存在:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

using Test; 

namespace CrossLanguage 
{ 
    public class Dog : Test 
    { 
    } 
} 

上引用的IDE錯誤測試,整個「找不到,你錯過了......」shenanigans。

我錯過了什麼嗎?

+0

您的代碼和想法*應該*工作,但請發佈確切的編譯器錯誤。 'Test'類是否出現在IDE的「類視圖」或「對象瀏覽器」窗口中?還要注意C#是區分大小寫的,VB.NET不是,所以它可能是一個套管問題。最後,你必須使你的虛擬類中的每一個方法(VB.NET中的Overridable)都能覆蓋它們。 – Dai

+2

VB爲每個項目都有一個根名稱空間,並且文件中聲明的任何名稱空間都嵌套在該名稱空間中。 C#沒有這樣的概念。所以,你可能有一個名爲'SomeProject.CrossLanguage.Test'的類 - 它與'CrossLanguage.Dog'有不同的命名空間。所以要麼你需要添加一個using指令(如錯誤告訴你的那樣)或者調整你的名字空間。 –

+4

'使用CrossLanguage;' –

回答

-1

可悲的是,這似乎是Visual Studio的一些怪癖。審查了你的意見之後,我今天坐下來,打開了解決方案,嘗試了幾件事情,而且,它的工作原理沒有改變任何事情。

感謝您的幫助,無論如何。

Ashilta