Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过reflection.NET获取静态属性_C#_.net_Reflection - Fatal编程技术网

C# 通过reflection.NET获取静态属性

C# 通过reflection.NET获取静态属性,c#,.net,reflection,C#,.net,Reflection,我已经看到这个答案了,但它对我不起作用。我试图从基类、从派生实例访问(非静态)类静态属性 在基类中: Type type = this.GetType(); PropertyInfo propInf = type.GetProperty("DirectoryCode", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); 此处,propInf为null(类型为派生类类型) 在派生类中: publ

我已经看到这个答案了,但它对我不起作用。我试图从基类、从派生实例访问(非静态)类静态属性

在基类中:

Type type = this.GetType();
PropertyInfo propInf = type.GetProperty("DirectoryCode", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
此处,propInf为null(类型为派生类类型)

在派生类中:

public class DTGCSMissonParameters : ModelBase
{
   public static ushort DirectoryCode = (ushort) DIR.MISSION_PARAMETERS;

感谢您在注释中指定了@JeroenVanLangen,您定义了一个字段而不是属性。正确的说法应该是:

// C# 6.0
public static ushort DirectoryCode => (ushort) DIR.MISSION_PARAMETERS;

// Pre-C# 6.0
public static ushort DirectoryCode
{ 
     get { return (ushort) DIR.MISSION_PARAMETERS; }
}
@编辑:正如Jeppe Stig Nielsen在评论中指出的那样,每次访问该房产时都会对第一个提议的解决方案进行评估。要避免这种情况,并使其保留属性本身的值,请使用:

public static ushort DirectoryCode { get; } = (ushort) DIR.MISSION_PARAMETERS;

您定义的对象是字段而不是属性,因此无法将其作为属性找到。对于C#6.0,请尝试:
publicstaticushortdirectorycode{get;}=(ushort)DIR.MISSION_参数@JeroenvanLangen把它写下来作为答案。写:“使用
GetField
而不是
GetProperty
”。我看到比亚克已经这样做了。所以我会支持他的。(我不喜欢添加类似的答案)或者,如果他希望字段保持原样,请使用
GetField
而不是
GetProperty
。注意:每次调用属性的
get
访问器时,您的建议都会重新评估
DIR.MISSION\u参数。这不是该领域所做的。如果希望只计算一次
DIR.MISSION_参数
,并且在早期(在
DTGCSMissonParameters的静态构造函数运行时),请使用
public static ushort DirectoryCode{get;}=(ushort)DIR.MISSION_参数取而代之。谢谢!将使用GetField,就像我将VS2013与C#5一起使用一样。将尝试获取VS2015,目前它可以工作。