DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

隠蔽されている非パブリックメンバを呼び出す

型のメンバを動的に呼び出す」で紹介したように、リフレクションを使うことにより、本来はアクセス範囲外の非パブリックメンバを呼び出すことができます。ただし、言うまでも無いことですが、公開されていないメンバはそうなっている理由があるはずなので、アクセスできたとしてもすべきではありません。ただ、「できないことは無い」というだけの話です。

DataGrid内の指定された行までスクロールする」ではDataGridクラスのProtectedメンバであるGridVScrolledメソッドを呼び出すためにDataGridクラスの派生クラスを作成しましたが、GridVScrolledメソッドを直接呼び出すコードを以下に示します。

VB.NET
コードを隠すコードを選択
'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})
C#
コードを隠すコードを選択
//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});

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。