제네릭 및 다형성에 대한 테스트를 수행하는 데 문제가 있습니다.다형성이있는 일반 인터페이스 사용
유형 'Testing.ChildBar'가 'Testing.BaseFoo'제네릭 형식 또는 메서드의 형식 매개 변수 'T'로 사용할 수 없습니다 : 내가 컴파일 할 때 여기
내가 점점 오전 오류입니다 . 'Testing.ChildBar'에서 'Testing.IBar'로의 암시적인 참조 변환은 없습니다.'Testing.ChildBar'형식은 'Testing.BaseFoo'제네릭 형식 또는 메서드에서 형식 매개 변수 'T'로 사용할 수 없습니다. 'Testing.ChildBar'에서 'Testing.IFoo'로의 암시 적 참조 변환은 없습니다. 내가 할 수 있도록하고 싶습니다 무엇
class Program { static void Main(string[] args) { Console.ReadKey(); } } public interface IFoo { Task<bool> Method1(); Task<bool> Method2(); Task<bool> Method3(); Task<bool> Method4(); Task<bool> Method5(); } public interface IBar<T> where T : BaseBar { T MyStuff { get; set; } } public abstract class BaseFoo<T> where T : BaseBar, IFoo, IBar<T> { public abstract T MyStuff { get; set; } public abstract Task<bool> Method1(); public abstract Task<bool> Method2(); public abstract Task<bool> Method3(); public abstract Task<bool> Method4(); public abstract Task<bool> Method5(); } public abstract class BaseBar { } public class ChildBar : BaseBar { public string TestMethod { get { return "Testing123"; } } } public class ChildFoo : BaseFoo<ChildBar> { private ChildBar _myStuff; public override ChildBar MyStuff { get { if (_myStuff == null) { _myStuff = new ChildBar(); } return _myStuff; } set { _myStuff = value; } } public override Task<bool> Method1() { return new Task<bool>(); } public override Task<bool> Method2() { return new Task<bool>(); } public override Task<bool> Method3() { return new Task<bool>(); } public override Task<bool> Method4() { return new Task<bool>(); } public override Task<bool> Method5() { return new Task<bool>(); } private void Test() { var test = MyStuff.TestMethod; } }
는 각각을 가지고 여러 가지 ChildFoo 년대를 만들 수 있습니다 :
그리고 여기에 내가에 위의 오류를 받고 있어요 콘솔 응용 프로그램에 대한 코드입니다 "MyStuff"속성이지만 "MyStuff"속성은 BaseBar에서 상속 한 모든 클래스가 될 수 있습니다.
당신이 이것을하는 더 좋은 방법이라고 생각할 수 있다면. 나는 모든 귀이다.
그 클래스 구조는 정말 혼란 스럽습니다. 당신이 성취하고자하는 것에 대한 좀 더 구체적인 예를 제공해 줄 수 있습니까? – BradleyDotNET