2012-11-05 2 views
2

내 모든 뷰 모델에 대한 추상 기본 클래스를 만들고 싶었지만 접근성 문제가있어이 오류를 탐색 할 수 없습니다. 여기에 내 코드의 예WinRT 클래스를 사용하여 공용 뷰 모델을 만드는 방법은 무엇입니까?

public ref class ViewModelBase { 
    ... 
} 

public ref class OtherViewModel : ViewModelBase { 
    ... 
} 

내가이 상태로 내 코드를 정의 할 때, 나는 다음과 같은 오류 얻을 :

오류 C4585 : 'MyNamespace에 :: ViewModelBase'을하십시오 WinRT '공공 심판 클래스를 '

오류 C3213 : 중 하나를 밀봉하거나 기존의 봉인 클래스 대신

하면,에서 파생되어야합니다, 나는이 오류를 얻을 ViewModelBase 비공개 기본 클래스'를 MyNamespa ce :: ViewModelBase '가'OtherViewModel '보다 액세스하기가 어렵습니다.

이것은 매우 간단해야합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

5

C++/CX에서 VS 2012와 같이 가능 C++/CX는 범용 시나리오에서 공용 클래스 상속을 지원하지 않습니다. XAML 시나리오를 사용할 수있을 정도로만 지원됩니다. 유일한 공용 개봉되지 않은 형식은 Windows::UI::Xaml 네임 스페이스 아래에있는 형식이며 사용자는 자신의 공개 개봉되지 않은 형식을 작성할 수 없습니다.

모든보기 모델에 기본 클래스를 사용하려는 경우 모든 클래스를 비공개로 설정하거나 기본 클래스에서 Windows::UI::Xaml (예 : DependencyObject)을 상속하는 유일한 옵션입니다. 당신의 기지로 DependencyObject에를 사용하여

  • 가 외설 많은 오버 헤드를 필요로 STA 개체를 추가 (그래서에만 UI 스레드에서 조작 할 수있는) 모든 viewmodels한다 :

    이러한 방법의 각

    는 단점이 있습니다 정말 필요해.
  • 클래스를 비공개로 설정하면 [Bindable] 속성을 사용하여 데이터 바인딩을 수행 할 수 없으므로 개인 데이터 바인딩 구현이 필요합니다. (귀하의 개인 수업은 ICustomPropertyProvider 및 관련 인터페이스를 구현해야합니다.)
+0

설명해 주셔서 감사합니다. BindableBase 클래스가 새 프로젝트 템플릿 중 하나와 함께 제공되었으며 DependencyObject를 사용한다는 사실을 확인했습니다. 이 제한이 상당히 실망 스럽긴하지만 계속 진행하려면 충분히 이해하는 것이 좋습니다. –

+2

예,이 제한 사항은 제품주기의 다소 늦은 시점에 나타 났으며 향후 출시를 위해 해당 기능 (일반 런타임 클래스 상속)을 유지하려는 Windows 런타임 팀의 요청에 따라 더 많은 활주로를 설계 할 때 일관된 이야기. 모든 언어 예측에는 이러한 제한이 있지만 런타임 반영을 통해 개인 클래스에 대한 데이터 바인딩을 지원할 수 있으므로 C#에서는 그다지 고통스럽지 않습니다. –

+0

그건 내가 본 것 중 가장 최악의 디자인이다. 완전히 OO 패러다임을 파괴한다. –

-1

"sealed"키워드는 클래스를 상속받을 수 없음을 의미합니다. 귀하의 구현은 다음과 비슷한 모습이 될 것

ref class ViewModelBase sealed 

당신은 당신 만 서브 클래스는이 같은 ref 클래스 수 있어야합니다 ViewModelBase에서 상속하려면 : 당신은 무엇을하려고하는 것은 엄격하지

class ViewModelBase 

... 

public ref class OtherViewModel sealed : ViewModelBase 
+1

맞습니다. 자료실을 완전히 봉인하는 것을 원치 않습니다. 모든 목적이 상속됩니다. 두 번째 예제는 오류를 생성합니다. ref 클래스는 다른 ref 클래스 나 인터페이스에서만 파생 될 수 있습니다. –

+0

나는 뭔가를 놓친 것 같습니다. 나는 여기에서 나의 모범을 보았습니다 : http://msdn.microsoft.com/en-us/library/windows/apps/hh699870.aspx – mydogisbox

관련 문제