親クラスでpublic宣言されたメソッドは、子クラスでprivate宣言し直すことはできない
Kazzzさんのblogに書かれていた下記の記事に興味を持ってちょっと調べてみたのがはじまりです。
WebBrowser メンバー (System.Windows.Forms)を見ると、Textプロパティは下記のように書かれています。
このコントロールでは、このプロパティはサポートされていません。(WebBrowserBase から継承されます。)
なんでしょう、サポートされていませんって?だったら、メンバにいれなければいいのにと思いませんか?それでちょっと調べてみたのですが、どうやら下記の掲示板でのやり取りを読む限り、親クラスでpublic宣言されたメソッドを、子クラスでprivate宣言し直すことはできないようです。
例えば、下記のように書くとインテリセンスにはたしかにTextプロパティは表示されないのですが、なぜかコンパイルエラーにはなりません。
string a = webBrowser1.Text;
※追記 Kazzzさんからコメントがあり、インテリセンスに出てこないのは、EditorBrowsableAttributeという属性でEditorBrowsableState.Neverと宣言しているからではないかとのこと。なるほど、インテリセンスのサポート有無も属性で指定できるんですね。むしろ指定できなかったら困りますね。
少々推測が入りますが、protected宣言してあるけども暗黙のキャストが行われ、継承元のTextプロパティにアクセスするという動きになっているのではないでしょうか。
つまり、System.Windows.Forms.Control::get_Text()メソッドにアクセスしているということです。
Kazzzさんのblogでこの件の正解と思われる内容を書いてくださっています。是非こちらをご参照ください。