나는 C++/cli로 작성된 추상 기본 클래스를 사용하고 있습니다. 이 클래스는 프로젝트에 있습니다. 그리고 난 abtract 기본 클래스를 상속 다른 프로젝트가 있습니다. 그래서 구조는 다음과 같습니다.clr 프로젝트 dll 사이의 상속
자료 프로젝트 :
public ref class Base abstract
{
// implementation
virtual CommonFunc();
};
public delegate void Foo();
파생 프로젝트 A :
public ref class A : public Base
{
// implementation
};
파생 프로젝트 B : 그래서
public ref class B : public Base
{
// implementation
};
그리고,. C# 프로젝트에서 A와 B 클래스를 모두 호출 할 수 있습니다. 그거 아무 문제 없어.
그러나 Foo 대리자를 Base로 사용하려고하면 다음과 같은 오류가 발생합니다.
오류 : '푸'는 '푸'는
이 제거하려면 '푸'사이 모호한 참조입니다. C# 프로젝트에서 A와 B 참조에 대한 extern 별칭을 정의했습니다. 그래서, 내가 AliasA.Foo와 같이 사용할 때, 괜찮습니다. 그러나 두 개의 A와 B dll에 두 개의 Foo가 있습니다. 그게 문제 야. 암시 적으로 변환 할 수 없습니다 : 나는 다음과 같은 몇 가지 코드를 개발하려고 할 때
그리고 마지막에
는, 컴파일러는AliasBase.Base base = new A();
base.CommonFunc();
base = new B();
base.CommonFunc();
오류
AliasBase.Base가 A의 기본임을 모르는 'A'에서 'Base'까지 입력하십시오.
내가 분명히했으면 좋겠습니다. 여름철에; 나는 세 dll 있습니다. 그들 중 하나는베이스의 dll이고 다른 것은 상속 된 클래스의 dll입니다. 상속 된 클래스의 dll에는 내부에 자체 기본 구현이 포함되어 있습니다. 기본 클래스의 여러 implemtantatins를 제거 할 수있는 방법이 있습니까?
참고 : 예, 프로젝트에 수집하면 문제가 없습니다. 그러나, 나는 파생 된 모든 항목에 대해 별도의 dll을 제공해야합니다.
미리 감사드립니다.
이것은 아마도 .h 파일에 넣고 다른 소스 파일에 # 포함시킨 코드 일 것입니다. 이제는 Base와 Foo의 여러 정의가 있습니다. 그리고 B와 C는 기본 클래스가 같지 않습니다. 아직 실행하지 못했지만 아마도 그렇게 될 것입니다. .h 파일을 사용하지 말고 A 및 B 프로젝트는 Base에 대한 어셈블리 참조를 사용해야합니다. –
답장을 보내 주셔서 감사합니다. #include "Base.h"라인을 제거하고 inheretec 클래스의 프로젝트에 Base 프로젝트에 대한 참조를 추가합니다. 그러나 이제 Base 클래스를 인식 할 수 없습니다. # import "Base.dll"을 추가하려고했지만 파일을로드 할 수 없습니다. 뭐가 문제 야? –
물론 추측하기 어렵습니다. 큰 변화, IntelliSense를 충분히 똑똑하게 만들기 위해서는 Build> Rebuild가 꼭 필요합니다. 네임 스페이스를 조심하십시오. 우리가 볼 수없는 다른 것입니다. 이전에 아무 것도 사용하지 않았다면, 이제'namespace'를 사용하는 문장을 추가해야합니다. –