Разница между классом ссылок C ++ / CLI и классом C # - PullRequest
3 голосов
/ 19 июля 2011

Я читал, что C ++ / CLI ref class эквивалентен классу C #. Тем не менее, я вижу разницу между this в каждом классе.

РЕДАКТИРОВАТЬ: я получил this от местных жителей Visual Studio 2010. (Кроме того, я заметил разницу во время компиляции при выполнении точно такого же приведения - класс C ++ / CLI выдал ошибку, заявив, что не может преобразовать Object ^ в MyClass ^, тогда как приведение с помощью класса C # не создает ошибок во время компиляции).

C # класс:

namespace MyNamespace
{

   public class MyClass
   {    
       public MyClass()
           {
               //Do something
           }
   }
}

this = MyNamespace.MyClass (Что я ожидаю и хочу!)


C ++ / CLI ref class:

namespace MyNamespace
{

   public ref class MyClass
   {    
       public:
           MyClass::MyClass()
           {
               //Do something
           }
   }
}

this = Система :: Объект ^ ( Не то, что я ожидал или хочу !!)


Я бы ожидал, что this будет похож на пример C #, в котором говорится, что this имеет тип MyClass. Однако класс C ++ / CLI ref утверждает, что он имеет тип Object. Что, безусловно, НЕ то, что я хочу. (Это усложняет в различных ситуациях, таких как приведение в функцию C ++).

Итак, мой вопрос (две части):

а) почему эти классы ведут себя по-разному с this?

б) как получить, чтобы мой класс C ++ / CLI ref имел правильный тип в this ??

Спасибо за ваше время заранее!

1 Ответ

2 голосов
/ 19 июля 2011

В отладчике вы видите имя базового класса - в данном случае Object^.Измените базовый класс MyClass на другой, и вы поймете, что я имею в виду.

Locals window

Обратите внимание, что в самом правом столбце отображается тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...