C++/CLI에서 추상 C# 클래스를 구현하려고합니다. 이 추상 기본 클래스는 이미에서 INotifyPropertyChanged를 구현하고, C#으로 작성된 언급 한 바와 같이 다음과 같은 경우 상속 지금C++/CLI : INotifyPropertyChanged를 구현하는 추상 C# 클래스를 구현하면 C++ 컴파일러 오류가 발생합니다. C3766
public interface class IAnotherNotifyPropertyChangedClass : public INotifyPropertyChanged
다음 C++/CLI 어셈블리에서
public abstract class BaseClass : INotifyPropertyChanged
, 나는에서 INotifyPropertyChanged를 구현하는 또 다른 인터페이스를 가지고 할
이public ref class AnotherNotifyPropertyChangedClass : public BaseClass, public IAnotherNotifyPropertyChangedClass
이 다음 결과 : 추상 C# 클래스의 BaseClass로와 C++/CLI에서 구현 IAnotherNotifyPropertyChangedClass 나는 다음과 같은 수 다음 컴파일 오류 :
error C3766: 'AnotherNotifyPropertyChangedClass' must provide an implementation for the interface method 'void System::ComponentModel::INotifyPropertyChanged::PropertyChanged::add(System::ComponentModel::PropertyChangedEventHandler ^)'
는 곧 나는에서 INotifyPropertyChanged IAnotherNotifyPropertyChangedClass에서 인터페이스 선언을 분리 할 때, 모든 것이 잘 컴파일합니다. 왜 그런가요? 이 선언은 C#을 사용할 때 잘 컴파일됩니다. 저는 VS 2012를 사용하고 .NET 3.5 혼합 모드 어셈블리를 컴파일합니다.
미리 감사드립니다.
건배!
편집 : 비슷한 문제 (여기에 C/C 제외) : http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/3047b8d1-348c-4ca6-b3f3-c396c03fedf7/ C++/CLI의 설계 상 이러한 동작이 있습니까? 는 C# 클래스가 그 알아서 (해야)하지 않는 추상적이기 때문에
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
, 당신이 당신의 C++ 클래스를 구현해야 다음 interafce이 같은 구현을 필요로하기 때문이다
인터페이스를 구현하는 C#으로 작성된 추상 클래스입니다. 동일한 시나리오를 순수한 C#에서 (INotifyPropertyChanged를 상속받은 다른 인터페이스를 선언하고 기본 클래스 위에 구현하면) 매력처럼 작동합니다. – barnacleboy
INotifyPropertyChanged의 두 가지 구현이있는 경우 어떻게했는지 말하려고했습니다. 그것은 공용 IEnumerator GetEnumerator()와 IEnumerable.GetEnumerator()와 비슷한 상황입니다. 둘 다 사용할 수 있어야합니다. –