Reputation: 847
I have a class C in Assembly A like this:
internal class C
{
internal static string About_Name {
get { return "text"; }
...
}
I have about 20 such static properties. Is there a way, in an outside assembly, without using friend assembly attribute (.Net reflection only), get class C so I can invoke any of the static string properties like this:
Class C = <some .Net reflection code>;
string expected = C.About_Name;
If that is not possible, a .Net reflection code to get the string property value directly will suffice, but not ideal.
Upvotes: 6
Views: 8614
Reputation: 5070
Try this...
Edit: I did not think about just using the type instead of object instance when it was a static property.
Removed var obj = Activator.CreateInstance(type);
and use type
in prop.GetValue instead of obj
.
namespace ClassLibrary1
{
internal class Class1
{
internal static string Test { get { return "test"; } }
}
public class Class2
{
}
}
var ass = Assembly.GetAssembly(typeof(Class2));
var type = ass.GetType("ClassLibrary1.Class1");
var prop = type.GetProperty("Test", BindingFlags.Static
| BindingFlags.NonPublic);
var s = (string)prop.GetValue(type, null);
Upvotes: 6
Reputation: 25277
Yep, it can be done.
It's using Type.GetProperty()
.
Example:
// Load your assembly and Get the Type
// Assembly load code...
...
// Get type
Type asmType = typeof(C);
// Get internal properties
PropertyInfo pi = asmType.GetProperty("About_Name", BindingFlags.NonPublic | BindingFlags.Static);
// Get Value
var val = pi.GetValue(asmType, null);
This code will return "text
" in val
, so from there do what you need to with it.
To do this in the sense that you want to, make the code into a method as follows:
private static string GetString(Type classToCheck, string PropertyName)
{
PropertyInfo pi = classToCheck.GetProperty(PropertyName, BindingFlags.NonPublic | BindingFlags.Static);
object val = null;
if (pi != null)
val = pi.GetValue(classToCheck, null);
return (val != null) ? val.ToString() : string.Empty;
}
The usage will then be:
string expected = GetString(typeof(C), "About_Name");
Upvotes: 0