public T CreateForm<T>() where T: BaseForm, BaseMainForm
나는 T는 BaseForm
및BaseMainForm
입니다 위의 방법을 알고있다. 그러나 T가 BaseForm
또는 a BaseMainForm
중 하나 여야한다는 제약 조건을 만들 수 있습니까?일반 타입과 제약 조건 또는
public T CreateForm<T>() where T: BaseForm, BaseMainForm
나는 T는 BaseForm
및BaseMainForm
입니다 위의 방법을 알고있다. 그러나 T가 BaseForm
또는 a BaseMainForm
중 하나 여야한다는 제약 조건을 만들 수 있습니까?일반 타입과 제약 조건 또는
아니요, C#에서는 허용되지 않습니다. 컴파일러는 제네릭 제약을 사용하여 제네릭 메서드 내에서 T
에서 사용할 수있는 연산을 결정합니다. 따라서 또는 식을 허용하면 형식이 안전하지 않습니다.
필요한 경우 BaseForm
및 BaseMainForm
의 공통 부분을 다루는 인터페이스를 추가하고이를 일반 제약으로 적용하는 것이 좋습니다. 이 방법으로, 인터페이스는 메소드 CreateForm<T>
이 필요로하는 계약을 정의합니다. 그리고 폼의 전달에서 인터페이스를 구현하는지 단순히 확인해야합니다. 같은
뭔가 :
public interface IBaseForm
{
Foo();
}
class BaseForm : IBaseForm {}
class BaseMainForm : IBaseForm {}
public T CreateForm<T>() where T : IBaseForm
그것은 불가능합니다.
인터페이스 또는 기본 클래스를 추가하고 해당 클래스를 모두 구현 한 다음이를 형식 제약 조건으로 사용하는 것이 좋습니다.
아니, 당신은 속성을 추출해야, 그의 CreateForm는 모두 상속 한 다음 방법은 해당 인터페이스를
명확하고 빠른 대답을 참조하는 새로운 인터페이스로의, BaseForm 및 BaseMainForm의 관심! 고맙습니다! –
BaseForm 또는 BaseMainForm을 제어 할 수 없으므로 인터페이스를 구현할 수 없으므로 훨씬 어려워집니다. –