2015-10-28 36 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