В управляемом проекте C ++ у меня есть шаблон класса BaseClass
, который содержит виртуальный метод virtMethod()
и не виртуальный метод экземпляра nonVirtMethod()
.
template<typename T>
public ref class BaseClass {
public:
virtual void virtMethod() {
}
void nonVirtMethod() {
}
};
У меня также есть класс DerivedClass
, который унаследован от шаблона класса BaseClass
public ref class DerivedClass : public BaseClass<System::String> {
public:
DerivedClass();
};
В проекте c ++ я могу вызвать как virtMethod()
, так и nonVirtMethod()
из экземпляра DerivedClass
, но в проекте c #, который ссылается на библиотеку проекта c ++, я могу вызвать только virtMethod()
. Можете ли вы объяснить мне, почему это происходит, почему я не могу вызвать метод nonVirtMethod()
из DerivedClass
экземпляра класса, если он не является виртуальным?
В проекте C ++ (/ clr). Все в порядке:
auto obj = gcnew DerivedClass();
obj->nonVirtMethod();
В проекте C #. Ошибка, DerivedClass
не содержит определения для nonVirtMethod()
:
var obj = new DerivedClass();
obj.nonVirtMethod();