Мой собственный управляемый тип как arg в библиотеке классов C ++ / CLI: CS0570: не поддерживается языком - PullRequest
5 голосов
/ 29 декабря 2011

Я пытался разработать библиотеку C ++ / CLI для использования в C #, и у меня возникла следующая проблема.Если мы возьмем мой управляемый ссылочный класс следующим образом:

namespace Library
{
using namespace System;

public ref class Test
{
internal:
    String^ internalString;
public:
    Test()
    {
        internalString = gcnew String("Hey There");
    }
    ~Test()
    {

    }
};

public ref class TestImplement
{
public:
    static String^ TestMessage(Test test)
    {
        return test.internalString;
    }
};
}

А моя реализация на C # выглядит следующим образом:

using System;

namespace AddProgram
{
class Program
{
    static void Main(string[] args)
    {
        Library.Test test = new Library.Test();
        Console.WriteLine(Library.TestImplement.TestMessage(test));
        Console.Read();
    }
}
}

Я получу следующееошибка:

ошибка CS0570: язык 'TestMessage' не поддерживается языком

Насколько я могу судить, это происходит из-за передачи типа Library.Test в качестве аргумента.Я не понимаю, почему я получаю это сообщение, и я надеюсь, что можно передавать типы из моей справочной библиотеки.

Любая помощь будет признательна

1 Ответ

13 голосов
/ 29 декабря 2011

Вам необходимо объявить TestMessage как принимающее ссылку на Library.Test, что означает использование символа вставки (^), как вы делали для String ^. C ++ / CLI позволяет вам обрабатывать ссылочные типы, используя семантику типов значений (своего рода), оставляя за кадром, но C # не имеет эквивалентной функции, поэтому вы получаете эту ошибку.

...