-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。
我錯過了什麼嗎?
您的代碼和想法*應該*工作,但請發佈確切的編譯器錯誤。 'Test'類是否出現在IDE的「類視圖」或「對象瀏覽器」窗口中?還要注意C#是區分大小寫的,VB.NET不是,所以它可能是一個套管問題。最後,你必須使你的虛擬類中的每一個方法(VB.NET中的Overridable)都能覆蓋它們。 – Dai
VB爲每個項目都有一個根名稱空間,並且文件中聲明的任何名稱空間都嵌套在該名稱空間中。 C#沒有這樣的概念。所以,你可能有一個名爲'SomeProject.CrossLanguage.Test'的類 - 它與'CrossLanguage.Dog'有不同的命名空間。所以要麼你需要添加一個using指令(如錯誤告訴你的那樣)或者調整你的名字空間。 –
'使用CrossLanguage;' –