自定义属性内部属性null c#

时间:2013-11-26 11:15:18

标签: c# properties custom-properties

我的自定义属性有问题。 这是有问题的财产:

[AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = false)]
public class UIProperty : Attribute
{   
    public UIProperty(string property, Type target) { Property = property; TargetType = target; }

    private string property; 
    public string Property { get{return property;} set{property = value;} }

    private PropertyInfo targetProperty; 
    public PropertyInfo TargetProperty { get { return targetProperty; } protected set { targetProperty = value; } }

    private Type targetType; 
    public Type TargetType { get{ return targetType; } set{ targetType = value; } }

    private object target; public object Target { get{return target; } set{ target = value;} }

    public void SetTargetProperty(PropertyInfo targetPropertyInfo, object target)
    {
        targetProperty = targetPropertyInfo;
        this.target = target;
    }

    public object TargetValue 
    { 
        get { return targetProperty.GetValue(target, null); }
        set { if (!value.Equals(TargetValue)) targetProperty.SetValue(target, value, null); }
    }
}

所以,如果我以这种方式取出后用SetTargetProperty设置自定义属性:

UIProperty uip = this.GetType (). GetProperty ("name"). GetCustomAttributes (typeof (UIProperty), true) [0] as UIProperty;

uip.SetTargetProperty (...);

我的属性已正确设置其目标及其属性。 没有什么是null或没有设置。 但是当我去代码中的其他地方拿起那个属性时,一切都回到null,好像我从未设置过......

当我从PropertyInfo动态获取或者他们将物理实例设置为属性时,类属性是实例化的吗?

有什么问题?

1 个答案:

答案 0 :(得分:1)

你是对的。正如that article中所指出的那样。如果要构造属性对象,则必须调用GetCustomAttributes或GetCustomAttribute。每次调用其中一个方法时,它都会构造指定属性类型的新实例,并根据代码中指定的值设置每个实例的字段和属性。