Использовать VB.NET и C# в том же приложении?

Проблема в том, что вы каждый раз переназначаете объект options, поскольку объекты являются ссылочными типами. Даже если бы вы сделали что-то подобное в своей функции: newOptions = options вы бы все равно ссылались на ваш старый объект options, и любые изменения в «новом» объекте newOptions также изменили бы объект options.

Однако, если вы хотите получить точно такой же объект и изменить его, не затрагивая другой, вы должны клонировать его. Вы можете добиться этого в JavaScript с помощью метода Object.create(). Вы можете прочитать больше об этом здесь .

Таким образом, весь ваш код будет выглядеть так:

var options = {x: 10}
console.log(options.x + ' original options object');

cat(options);
function cat(options) {
  newOptions = Object.create(options);
  newOptions.x = 3;
  x = newOptions.x;
  console.log(x + ' cat = 3'); // this should equal 3
  mouse(x);
}

dog(options);

function dog(options) {
  newOptions = Object.create(options);
  newOptions.x = 7;
  x = newOptions.x;
  console.log(x + ' dog = 7'); // this should equal 7
  mouse(x);
}

// SHARED FUNCTION
function mouse(x) {
  console.log(x + ' mouse = cat() and/or dog()'); // I want this to equal 3 for cat() and 7 for dog() just as it is with x defined inside cat() and dog().
}

console.log(options.x + ' final global scope check = 10'); // I want this to remain 10, not 3. But the changes in cat() are poluting the global definition of options.x.

16
задан Peter Mortensen 7 October 2009 в 10:11
поделиться

5 ответов

Я никогда не делал этого сам, но знаю, что вы можете скомпилировать код C # в dll, а затем загрузить dll и сослаться на нее в своем проекте VB.

From ] «Вызов класса C # в VB.net» :

Я думаю, что код C #, который вы хотите использование должно быть скомпилировано как DLL. однажды это сделано, просто добавьте ссылку к этому проекту на ваш VB.Net проекта, импортируйте пространство имен, которое вы нужно, а затем вы можете использовать C # код.

См. также Как: создавать и использовать библиотеки C # DLL (из MSDN, для VS2005)

16
ответ дан 30 November 2019 в 15:20
поделиться

Я просто хочу знать, можно ли использовать и VB, и C # в одном проекте.

Нет, не в одном проекте . С другой стороны, вы можете использовать их в том же решении .

Или я могу включить модуль, написанный на C #, в свой проект VB.net.

Я предлагаю вам создать решение, содержащее два проекта: один на C #, который формирует библиотеку, которую вы используете из своего проекта VB. Это просто, легко поддерживать и легко расширять.

27
ответ дан 30 November 2019 в 15:20
поделиться

Если вы планировали использовать модуль только в проектах Visual Basic, вам следует подумать о преобразовании кода только в Visual Basic. Если вам нужно использовать модуль как в C #, так и в VB.NET программах, я бы использовал одно из описанных выше решений

Вы можете попробовать что-то вроде * Convert C # to VB.NET . Он преобразует C # в код VB.NET. Я использую эту страницу исключительно, когда мне нужно преобразовать что-то, что я нахожу в сети, написанное на C #.

0
ответ дан 30 November 2019 в 15:20
поделиться

Вы также хотите убедиться, что ваш код C # соответствует CLS. Это означает, что он не будет публично раскрывать какие-либо функции, которые другие языки .NET не будут понимать (например, целые числа без знака, которых нет в VB, или разные классы только по регистру, поскольку VB не чувствителен к регистру). Для этого вам нужно добавить атрибут, чтобы компилятор выдавал ошибки, если вы нарушили какие-либо правила. В этой статье показано, как это сделать:

Атрибут CLSCompliantAttribute может применяться к сборкам, модулям, типы и члены.

Для маркировки всей сборки как CLS-совместимой следующий синтаксис используется

 using System; 
[сборка: CLSCompliant (true)]

Для маркировки определенного метода как CLS-совместимого используется следующий синтаксис используется

  [Соответствует CLSC (верно)] 
public void MyMethod () `
9
ответ дан 30 November 2019 в 15:20
поделиться

Поместите код VB.NET и C # в отдельные проекты. (Я использую как VB.NET, так и C # в моем проекте с открытым исходным кодом http://msquant.sourceforge.net/ , и он отлично работает).

Вам не нужно беспокоиться о библиотеках DLL, просто обратитесь к проекту (используйте вкладку «Проект» в диалоговом окне «Добавить ссылку»). Например, если вам нужно использовать функцию в коде / проекте C #, добавьте ссылку из проекта VB.NET в проект C #.

3
ответ дан 30 November 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: