답변:
Create
방법은 정적이며,에서만 존재한다 WebRequest
. 그것을 호출하는 것은 HttpWebRequest.Create
다르게 보일 수 있지만 실제로는 WebRequest.Create
. 켜진 것 같습니다.HttpWebRequest
상속 때문에 .
이 Create
메서드는 내부적으로 팩토리 패턴을 사용하여 Uri
전달한 개체를 기반으로 실제 개체 생성을 수행 합니다. 에 따라 a FtpWebRequest
또는 같은 다른 개체를 실제로 다시 가져올 수 있습니다.FileWebRequest
Uri
WebRequest
Create
전달 된 URL에 따라 구체적인 하위 클래스의 인스턴스를 만드는 팩토리 메서드가있는 추상 클래스 입니다. HttpWebRequest httpreq = (HttpWebRequest)WebRequest.Create(strUrl);
대신
필요하거나 원하는
WebRequest req = WebRequest.Create(strUrl);
것은 필요와 전달하는 URL의 종류에 따라 다릅니다.
HTTP : URL 만 전달하는 경우 이전 코드를 사용하면 HttpWebRequest
기본 클래스에 정의 된 속성과 하위 클래스가 구현 하는 속성 및 메서드에 액세스 할 수 있습니다 WebRequest
. 그러나 FTP : URL을 전달했다면HttpWebRequest
가 실패합니다.
후자는 일반적이며 지원되는 URL 유형에서 실패하지 않지만 물론 하위 클래스로 캐스팅하지 않고 기본 클래스가 정의하는 속성 및 메서드에만 액세스 할 수 있습니다.
-Martin Honnen 경유
캐스트는 HttpWebRequest에 고유 한 멤버에 액세스해야하는 경우에만 필요합니다. WebRequest에서 지원되는 속성 / 메소드가 충분하다면 다양한 유형의 요청 / 응답 프로토콜에 대해 작동하는 애플리케이션을 작성할 수 있습니다. 이 경우 URI는 플러그 형 프로토콜에서 지원하는 프로토콜을 사용하여 사용자가 제공 한 것일 수 있습니다. 원래 소프트웨어를 변경하지 않고도 새로운 프로토콜을 지원할 수 있습니다.
애플리케이션이 특정 프로토콜에 특정한 기능을 더 많이 제어해야하는 경우 requestUri를 지원되는 체계로 제한하고 WebRequest를 적절한 프로토콜 별 하위 클래스로 캐스팅 할 수 있습니다. 이렇게하면 애플리케이션에서 지원하는 프로토콜이 제한되지만 프로토콜 별 기능을 조정할 수 있습니다.