2016-07-15 5 views
-1

私はSystem.Web.Helpers.Webgridが新しいグリッドの基本クラスとして使われているプロジェクトに取り組んでいます。 私はリフレクションを使って基本クラスのプライベートメソッドを呼び出すと信じています。誰かが私はSystem.Web.Helpers.WebGridはそれが"GetDefaultColumns"という名前のメソッドを持っていることを推測することができ、GetDefaultColumnsMethod返すものとして見て、.......以下のコードで をC#Reflection - GetMethod

を明確にしてくださいもらえますか?以下のコードで

private MethodInfo GetDefaultColumnsMethod 
{ 
    get { return typeof(System.Web.Helpers.WebGrid).GetMethod("GetDefaultColumns", BindingFlags.Instance | BindingFlags.NonPublic); } 
} 

private IEnumerable<WebGridColumn> GetDefaultColumns(IEnumerable<string> exclusions) 
{ 
    return (IEnumerable <WebGridColumn>)GetDefaultColumnsMethod.Invoke((System.Web.Helpers.WebGrid)this, BindingFlags.Instance | BindingFlags.NonPublic, null, new object[] { exclusions }, null); 
} 
+0

基準源https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Helpers/WebGrid/WebGrid.cs –

+0

これは、[ドキュメント]で指定されています(https://msdn.microsoft.com/en-us/library/05eey4y9(v=vs.110).aspx)。 – Default

+0

メソッドを呼び出す場合は、* expected parameters *があるかどうかテストすることをお勧めします –

答えて

2

、GetDefaultColumnsMethodは 何かを返すよう見て、私はSystem.Web.Helpers.WebGridは「GetDefaultColumns」という名前のその上でメソッド を持っていることを推測することができますか?

はい。その名によって

  • BindingFlags.Instance | BindingFlags.NonPublicを指定する方法について

    • Type.GetMethod検索あなたがpublicないインスタンス方法を(static 1とは反対に)(ただし、それは私protected/internalことがありますか)検索を意味。私は以下のデバッグコードを追加し、私は今、メソッドのリストを持っている....

      をだから私は今そこにあるもののデバッグと見ることができます.....とより - より深く掘る

  • 0

    その点、WebGridコンポーネントの新しいバージョンではないもの。

    Type tt = this.GetType(); 
        Type t = tt.BaseType; 
    
        PropertyInfo[] props = 
         t.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); 
        MethodInfo[] mths = t.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); 
    
    関連する問題