В настоящее время я изучаю возможность объединения как 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 на ссылках Тестировать, с целым «не удалось найти, вы отсутствуете ...», махинации.
Я что-то упустил?
Вы код и идея * должны * работать, но, пожалуйста, сообщите точную ошибку компилятора. Является ли класс 'Test' отображаться в окнах класса или в обозревателе объектов в среде IDE? Также обратите внимание, что C# чувствителен к регистру, VB.NET - нет, поэтому это может быть проблема с корпусом. Наконец, вы должны сделать каждый метод в своих классах 'virtual' (' Overridable' в VB.NET), чтобы вы их переопределили. – Dai
VB имеет корневое пространство имен для каждого проекта и любые пространства имен, объявленные в файлах, вложенные в него. У C# такой концепции нет. Итак, у вас, вероятно, есть класс под названием «SomeProject.CrossLanguage.Test» - который находится в другом пространстве имен в «CrossLanguage.Dog». Поэтому либо вам нужно добавить директиву использования (как сообщила вам ошибка), либо настроить пространство имен. –
'using CrossLanguage;' –