1

鉴于此定义:

[UniqueId("Ident")]
public class MyClass : MyBase
{
    public int Ident{ get; }
}

从“MyBase”类中获取“UniqueId”属性、找到匹配的属性名称并获取基础值的最佳方法是什么?

4

2 回答 2

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...         
}
于 2009-01-15T15:12:04.393 回答
1

我不完全明白你为什么要在课堂上使用那个属性。将它添加到属性中不是更明显,如下所示:

public class MyClass
{
    [UniqueId]
    public int Ident{ get; }
}

您可以使用类似的方式访问此值

var identity = objectThatHasAnIdentity.GetId();

GetId现在可以是一个扩展方法,object它实现类似于 Marc 上面发布的代码

于 2009-01-15T15:47:15.150 回答