鉴于此定义:
[UniqueId("Ident")]
public class MyClass : MyBase
{
public int Ident{ get; }
}
从“MyBase”类中获取“UniqueId”属性、找到匹配的属性名称并获取基础值的最佳方法是什么?
鉴于此定义:
[UniqueId("Ident")]
public class MyClass : MyBase
{
public int Ident{ get; }
}
从“MyBase”类中获取“UniqueId”属性、找到匹配的属性名称并获取基础值的最佳方法是什么?
基类中的抽象方法/属性不是更合适吗?
public abstract int UniqueId {get;}
通过属性,如下所示:
object GetUniqueId() // or int
{
Type type = GetType();
UniqueIdAttribute attrib = null;
foreach(UniqueIdAttribute tmp in
type.GetCustomAttributes(typeof(UniqueIdAttribute), true))
{
attrib = tmp;
break;
}
if (attrib == null) throw new InvalidOperationException();
return type.GetProperty(attrib.PropertyName).GetValue(this, null);
// perhaps cast here...
}
我不完全明白你为什么要在课堂上使用那个属性。将它添加到属性中不是更明显,如下所示:
public class MyClass
{
[UniqueId]
public int Ident{ get; }
}
您可以使用类似的方式访问此值
var identity = objectThatHasAnIdentity.GetId();
GetId
现在可以是一个扩展方法,object
它实现类似于 Marc 上面发布的代码