Why is my (Type).GetFields(BindingFlags.Instance | BindingFlags.Public) not working?

Posted by granadaCoder on Stack Overflow See other posts from Stack Overflow or by granadaCoder
Published on 2010-06-11T15:48:42Z Indexed on 2010/06/11 15:52 UTC
Read the original article Hit count: 160

Filed under:
|
|

My code can see the NonPublic members, but not the Public ones. (???)

Full sample code below.

FieldInfo[] publicFieldInfos = t.GetFields(BindingFlags.Instance | BindingFlags.Public);

is returning nothing.

Note, I'm trying to get at the properties on the abstract class as well as the 1 concrete class.

(And read the attributes as well).

I'm going bonkers on this one....the msdn example works with the 2 flags (BindingFlags.Instance | BindingFlags.Public).....but my mini inheritance example below is not.

THANKS in advance.

/////////////START CODE



private void RunTest1()

{

try

{

textBox1.Text = string.Empty;

Type t = typeof(MyInheritedClass);


//Look at the BindingFlags *** NonPublic ***

int fieldCount = 0;

while (null != t)

{

fieldCount += t.GetFields(BindingFlags.Instance | 
BindingFlags.NonPublic).Length;

FieldInfo[] nonPublicFieldInfos = t.GetFields(BindingFlags.Instance | 
BindingFlags.NonPublic);

foreach (FieldInfo field in nonPublicFieldInfos)

{

if (null != field)

{

Console.WriteLine(field.Name);



}

}

t = t.BaseType;

}



Console.WriteLine("\n\r------------------\n\r");





//Look at the BindingFlags *** Public ***

t = typeof(MyInheritedClass);

FieldInfo[] publicFieldInfos = t.GetFields(BindingFlags.Instance | 
BindingFlags.Public);

foreach (FieldInfo field in publicFieldInfos)

{

if (null != field)

{

Console.WriteLine(field.Name);



object[] attributes = field.GetCustomAttributes(t, true);

if (attributes != null && attributes.Length > 0)

{

foreach (Attribute att in attributes)

{

Console.WriteLine(att.GetType().Name);



}

}

}

}

}

catch (Exception ex)

{

ReportException(ex);

}

}

private void ReportException(Exception ex)

{



Exception innerException = ex;

while (innerException != null)

{

Console.WriteLine(innerException.Message + System.Environment.NewLine + 
innerException.StackTrace + System.Environment.NewLine + 
System.Environment.NewLine);



innerException = innerException.InnerException;

}

}


public abstract class MySuperType

{

public MySuperType(string st)

{

this.STString = st;

}

public string STString

{

get;

set;

}

public abstract string MyAbstractString {get;set;}

}

public class MyInheritedClass : MySuperType

{

public MyInheritedClass(string ic)

: base(ic)

{

this.ICString = ic;

}

[Description("This is an important property"),Category("HowImportant")]

public string ICString

{

get;

set;

}


private string _oldSchoolPropertyString = string.Empty;

public string OldSchoolPropertyString

{

get { return _oldSchoolPropertyString; }

set { _oldSchoolPropertyString = value; }

}


[Description("This is a not so importarnt property"), 
Category("HowImportant")]

public override string MyAbstractString

{

get; set;

}


}

© Stack Overflow or respective owner

Related posts about c#

Related posts about type