「型のメンバを動的に呼び出す」で紹介したように、リフレクションを使うことにより、本来はアクセス範囲外の非パブリックメンバを呼び出すことができます。ただし、言うまでも無いことですが、公開されていないメンバはそうなっている理由があるはずなので、アクセスできたとしてもすべきではありません。ただ、「できないことは無い」というだけの話です。
「DataGrid内の指定された行までスクロールする」ではDataGridクラスのProtectedメンバであるGridVScrolledメソッドを呼び出すためにDataGridクラスの派生クラスを作成しましたが、GridVScrolledメソッドを直接呼び出すコードを以下に示します。
'DataGrid1のTypeを取得 Dim t As Type = DataGrid1.GetType() 'パラメータで渡すScrollEventArgsオブジェクトを作成 Dim args As New ScrollEventArgs(ScrollEventType.LargeIncrement, 10) 'GridVScrolledメソッドを呼び出す t.InvokeMember("GridVScrolled", _ System.Reflection.BindingFlags.NonPublic Or _ System.Reflection.BindingFlags.Instance Or _ System.Reflection.BindingFlags.InvokeMethod, _ Nothing, _ DataGrid1, _ New Object() {DataGrid1, args})
//DataGrid1のTypeを取得 Type t = DataGrid1.GetType(); //パラメータで渡すScrollEventArgsオブジェクトを作成 ScrollEventArgs args = new ScrollEventArgs(ScrollEventType.LargeIncrement, 10); //GridVScrolledメソッドを呼び出す t.InvokeMember("GridVScrolled", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod, null, DataGrid1, new object[] {DataGrid1, args});
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。