당신은 할 수 있습니다 당신은 만 HtmlTextArea
을 말함으로써, 범위를 축소하는 것은 그래서 아니,이 :)
사진 추론이 예제를 할 수 없어, 전달 될 수있다 generics으로하십시오. 인터페이스에 HtmlControl 및 그 자식에 제약이있는 형식 매개 변수를 지정합니다. 그런 다음 구현에서 HtmlControl 또는 하위 클래스를 사용할 수 있습니다. 이 예에서 나는 HtmlControl을 사용하고 있습니다,하지만 난 테스트() 메소드를 호출하고있어 모두 HtmlControl과 HtmlTextArea :
public class HtmlControl {}
public class HtmlTextArea : HtmlControl { }
// if you want to only allow HtmlTextArea, use HtmlTextArea
// here instead of HtmlControl
public interface IExample<T> where T : HtmlControl
{
void Test(T ctrl);
}
public class Example : IExample<HtmlControl>
{
public void Test(HtmlControl ctrl) { Console.WriteLine(ctrl.GetType()); }
}
class Program
{
static void Main(string[] args)
{
IExample<HtmlControl> ex = new Example();
ex.Test(new HtmlControl()); // writes: HtmlControl
ex.Test(new HtmlTextArea()); // writes: HtmlTextArea
}
}
사고의 내 라인은
, 즉, 내가 할 수있는 인터페이스 오브젝트를하는 방법 서명 등 메소드에 대한 호출에서 자식 구현을 전달합니다. 나는이 예제에서 제네릭이 실제로 필요 없다고 생각했다. – dotnetdev
@dotnetdev : 자식 클래스에서 메서드의 시그니처를 변경할 필요가 없습니다. HtmlControl'을 상속받은 자식을 Test 메서드에 전달하면이 테이블이나 앵커와 관계없이 작동합니다. 그것은 OOP의 주된 원리 중 하나입니다 - 다형성 – vittore
이것은 잘못되었으며 허용 된 대답이되어서는 안됩니다. 이것은 컴파일되지 않습니다. 답변을 확인하고 수정하십시오. @ dotnetdev :이 대답을 받아들이는 것을 다시 생각해보십시오. 잘못이 아니라 설명이 전혀 없기 때문입니다. 이것은 미래의 독자들에게 도움이되지 않을 것입니다. –