Saya melihat potongan kode ini:
var request = (HttpWebRequest) WebRequest.Create("http://www.google.com");
Mengapa Anda perlu melakukan transmisi (HttpWebRequest)
? Mengapa tidak digunakan saja HttpWebRequest.Create
? Dan mengapa HttpWebRequest.Create
membuat WebRequest
, bukan HttpWebRequest
?
c#
httpwebrequest
Tidak diketahui
sumber
sumber
Jawaban:
The
Create
metode statis, dan hanya ada diWebRequest
. MenyebutnyaHttpWebRequest.Create
mungkin terlihat berbeda, tetapi sebenarnya disusun hingga panggilanWebRequest.Create
. Tampaknya hanya berlakuHttpWebRequest
karena warisan.The
Create
Metode internal, menggunakan pola pabrik untuk melakukan penciptaan sebenarnya benda, berdasarkanUri
Anda lulus untuk itu. Anda sebenarnya bisa mendapatkan kembali objek lain, sepertiFtpWebRequest
atauFileWebRequest
, tergantung padaUri
.sumber
WebRequest.CreateHttp
berada di 4,5WebRequest
adalah kelas abstrak, yang memiliki metode pabrikCreate
yang, bergantung pada URL yang diteruskan, membuat instance subkelas konkret. Apakah Anda perlu atau inginHttpWebRequest httpreq = (HttpWebRequest)WebRequest.Create(strUrl);
bukanWebRequest req = WebRequest.Create(strUrl);
tergantung pada kebutuhan Anda, dan pada jenis URL Anda lulus dalam.Jika Anda hanya meneruskan HTTP: URL, maka kode sebelumnya memungkinkan Anda untuk mengakses properti dan metode yang
HttpWebRequest
diterapkan subkelas selain yang ditentukan di kelas dasarWebRequest
. Tetapi jika Anda mengirimkan FTP: URL maka upaya untuk mentransmisikan keHttpWebRequest
akan gagal.Yang terakhir ini bersifat umum dan tidak akan gagal pada salah satu jenis URL yang didukung tetapi tentu saja tanpa mentransmisikan ke subkelas apa pun Anda hanya dapat mengakses properti dan metode yang ditentukan kelas dasar.
- melalui Martin Honnen
sumber
Pemeran hanya diperlukan saat Anda membutuhkan akses ke anggota yang unik untuk HttpWebRequest. Idenya adalah jika properti / metode yang didukung di WebRequest cukup, maka Anda dapat menulis aplikasi yang akan bekerja pada banyak jenis protokol permintaan / respons. Dalam hal ini URI dapat berupa sesuatu yang diberikan oleh pengguna menggunakan protokol apa pun yang didukung oleh protokol yang dapat dicolokkan. Protokol baru bahkan dapat didukung tanpa mengubah perangkat lunak aslinya.
Jika aplikasi Anda membutuhkan lebih banyak kontrol atas fitur yang spesifik untuk protokol tertentu, maka Anda dapat membatasi requestUri ke skema yang didukung dan mentransmisikan WebRequest ke subkelas khusus protokol yang sesuai. Ini membatasi protokol yang didukung oleh aplikasi Anda, tetapi memungkinkan Anda mengubah fitur khusus protokol.
sumber