"Вы можете создатьсборки, состоящие из типов, реализованных на разных языках программирования. […] "
Я не уверен, что это на самом деле добавляет большую ценность в реальных сценариях, (a) потому что Visual Studio нене поддерживает ссылки проекта на сетевые модули и (b) потому что вы можете получить то же преимущество со сборками.
Существует одно заметное различие между подходом с несколькими сборками и сборкой из нескольких файлов: одна сборка не может получить доступ по умолчаниютипы других сборок с видимостью internal
/ Friend
(т.е. сборка).Если вместо этого вы компилировали модули, а затем связывали их в одну многофайловую сборку, модуль, скомпилированный из C #, мог получить доступ к internal
типам модулей, скомпилированных с VB.NET (и наоборот).
Ниже вы найдете краткую демонстрацию этого.
CsharpClass.cs:
internal class CsharpClass { }
VbClass.vb:
Friend Class VbClass : End Class
Program.cs:
public static class Program
{
public static void Main()
{
var vbClass = new VbClass();
var csharpClass = new CsharpClass();
}
}
Скрипт сборки для сетевых модулей:
csc.exe /t:module /out:CsharpClass.netmodule CsharpClass.cs
vbc.exe /t:module /out:VbClass.netmodule VbClass.vb
csc.exe /t:exe /out:Program.exe /addmodule:CsharpClass.netmodule /addmodule:VbClass.netmodule Program.cs
Эта сборка будетработать и выполнять без ошибок.
Обратите внимание, что в расширении файла .netmodule
нет ничего волшебного;это только соглашение, но выходной файл представляет собой обычную .NET DLL.
Сценарий сборки для сборок:
csc.exe /t:library /out:CsharpClass.dll CsharpClass.cs
vbc.exe /t:library /out:VbClass.dll VbClass.vb
csc.exe /t:exe /out:Program.exe /r:CsharpClass.dll /r:VbClass.dll Program.cs
Эта сборка завершится неудачно, потому что:
Program.cs(5,27): error CS0122: 'VbClass' is inaccessible due to its protection level
Program.cs(5,23): error CS0143: The type 'VbClass' has no constructors defined
Program.cs(6,31): error CS0122: 'CsharpClass' is inaccessible due to its protection level
Program.cs(6,27): error CS0143: The type 'CsharpClass' has no constructors defined