c# use reflection to get a private member variable from a derived class

后端 未结 2 1469
慢半拍i
慢半拍i 2020-12-21 03:55

I have the following structure:

abstract class Parent {}


class Child : Parent
{   
    // Member Variable that I want access to:
    OleDbCommand[] _comman         


        
相关标签:
2条回答
  • 2020-12-21 04:25
    // _commandCollection is an instance, private member
    BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
    
    // Retrieve a FieldInfo instance corresponding to the field
    FieldInfo field = GetType().GetField("_commandCollection", flags);
    
    // Retrieve the value of the field, and cast as necessary
    IDbCommand[] cc =(IDbCommand[])field.GetValue(this);
    

    Array covariance should ensure that the cast is successful.

    I assume some designer will be generating the subclasses? Otherwise, a protected property is probably what you're looking for.

    0 讨论(0)
  • 2020-12-21 04:36

    It's possible, though it's a decidedly bad idea.

        var field = GetType().GetField("_commandCollection", BindingFlags.Instance | BindingFlags.NonPublic);
    

    I think what you really want to do is provide a method for the child classes to provide the parent with the required data:

    protected abstract IEnumerable<IDBCommand> GetCommands();
    
    0 讨论(0)
提交回复
热议问题