2015-10-28 3 views
-1

В настоящее время я изучаю возможность объединения как VB.net, так и C# .net в одно и то же решение с целью прекращения написания кода VB.net, а затем по ссылке, рефакторинг что было написано на C#. Мое понимание структуры .net предполагает, что я могу расширить класс одного языка, используя класс другого языка, но я просто не могу найти способ заставить его работать.Расширение классов VB.net в C# .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, я могу представить все, что мне нравится, и появляется «Животное». Теперь все, что я сделал дальше, это создать новый проект 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 на ссылках Тестировать, с целым «не удалось найти, вы отсутствуете ...», махинации.

Я что-то упустил?

+0

Вы код и идея * должны * работать, но, пожалуйста, сообщите точную ошибку компилятора. Является ли класс 'Test' отображаться в окнах класса или в обозревателе объектов в среде IDE? Также обратите внимание, что C# чувствителен к регистру, VB.NET - нет, поэтому это может быть проблема с корпусом. Наконец, вы должны сделать каждый метод в своих классах 'virtual' (' Overridable' в VB.NET), чтобы вы их переопределили. – Dai

+2

VB имеет корневое пространство имен для каждого проекта и любые пространства имен, объявленные в файлах, вложенные в него. У C# такой концепции нет. Итак, у вас, вероятно, есть класс под названием «SomeProject.CrossLanguage.Test» - который находится в другом пространстве имен в «CrossLanguage.Dog». Поэтому либо вам нужно добавить директиву использования (как сообщила вам ошибка), либо настроить пространство имен. –

+4

'using CrossLanguage;' –

ответ

-1

С грустью кажется, что это была какая-то причуда Visual Studio. Пересмотрев ваши комментарии, я сел сегодня и открыл решение, чтобы попробовать пару вещей, и, ну, он работает без меня, ничего не меняя.

Спасибо за вашу помощь независимо.

Ashilta

Смежные вопросы