2011-07-18 2 views
3

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

EDIT: Я получил 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 = System :: Object^ (Не то, что я ожидал, или хотите !!)


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

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

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

b) Как получить класс C++/CLI ref для правильного типа в this ??

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

+1

Как вы можете проверить тип 'this'? – svick

+0

Вы не указали какой-либо соответствующий код, который показывает нам, как вы использовали 'this' –

+0

@svick: из местных жителей Visual Studio 2010 – developer

ответ

2

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

Locals window

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

+0

Mine выглядит несколько иначе (только два уровня .. 'this' и' System :: Object^'Но вы правы, тип отличается. Он читает« MyNamespace :: MyClass^». Но, к сожалению, я все еще получаю неправильный тип при попытке наложить .. но я думаю, что это не проблема с 'this'. – developer

Смежные вопросы