INavigationWrapper
을 구현하는 View
을 배치해야하는 클래스가 있습니다. 이렇게 정의하면 다음과 같습니다.제네릭 매개 변수에 클래스와 인터페이스를 어떻게 지정합니까?
public class NavigationStackLayout : Layout<T> where T : View, INavigationWrapper
그런 다음 다른 모든 곳에서 T를 지정해야합니다.
public class NavigationStackLayout : Layout<View>
또는
public class NavigationStackLayout : Layout<INavigationWrapper>
다음 클래스 '아이들이 유형의 일부를 누락 : 그래서처럼 정의합니다. 이렇게 정의하면 다음과 같습니다.
public class NavigationStackLayout : Layout<View : INavigationWrapper>
구문 오류입니다. 특정 하위 클래스를 지정하지 않고도 generic 매개 변수에 클래스와 인터페이스를 어떻게 지정합니까?
UPDATE :
이 명확하게하기 위해, 내가 Layout<T>
를 보유하고 있지 않습니다, 그래서 난 그냥 내 제네릭이 아닌 클래스에 일반적인 방법을 추가 할 수 없습니다; Layout<T>
님의 기존 방법을 사용해야합니다. Layout<T>
의 제약 조건이 where T : View
이기 때문에 그들이 작동 할 것입니다.
나는 다음과 같은 작업을 할 것입니다 수있는 솔루션을 찾고 있어요 : 당신이 각 NavigationStackLayout
개체로 하나의 클래스를 넣어 사용하면 일반적인 경로를 이동하고 정적 메서드를 추가 할 수 괜찮 가정
class View1 : View, INavigationWrapper {}
class View2 : ContentView, INavigationWrapper {} // ContentView is a subclass of View
class View3 : View
var stack = new NavigationStackLayout();
stack.Add(new View1()); // this works
stack.Add(new View2()); // this also works
stack.Add(new View3()); // this fails at compile time
'보기 '는 이미'INavigationWrapper'을 구현합니까? 그렇지 않으면 두 유형의 멤버에 액세스하려면 하위 유형이 필요합니다. 또는'View' 서브 클래스가 파생 된'INavigationWrapper'를 구현하는'View'의 파생 클래스를 생성 할 수 있습니다. – Maarten
아니요, '보기'는 없습니다. 나는 특별한 하위 타입을 염두에 두지 않고 단지'INavigationWrapper'를 구현하는'View'를 추가 할 수 있기를 원합니다. – Simon
"그 밖의 모든 곳에서 T를 지정해야합니다."라는 말의 의미를 명확히 할 수 있습니까? 여기에 귀하의 불만 사항은 무엇입니까? 너는 무엇을 피하려고하는거야? –