鉴于此定义:
[UniqueId("Ident")]
public class MyClass : MyBase
{
public int Ident{ get; }
}
“MyBase”类获取“UniqueId”属性的最佳方法是什么,找到匹配的属性名称并获取基础值?
答案 0 :(得分:2)
基类中的抽象方法/属性不是更合适吗?
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...
}
答案 1 :(得分:1)
我不完全理解你为什么要在课堂上使用这个属性。将它添加到属性中是不是更明显,如下所示:
public class MyClass
{
[UniqueId]
public int Ident{ get; }
}
您可以使用
之类的内容访问此值var identity = objectThatHasAnIdentity.GetId();
GetId
现在可以是object
上的扩展方法,它实现类似于Marc上面发布的代码