-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;' –