是否可以通过反思来设置私有财产?

我可以通过反思设置私有财产吗?


public abstract class Entity

{

    private int _id;

    private DateTime? _createdOn;

    public virtual T Id

    {

        get { return _id; }

        private set { ChangePropertyAndNotify(ref _id, value, x => Id); }

    }

    public virtual DateTime? CreatedOn

    {

        get { return _createdOn; }

        private set { ChangePropertyAndNotify(ref _createdOn, value, x => CreatedOn); }

    }

}

我已经尝试了以下方法,但它不起作用,其中t表示一种Entity:


var t = typeof(Entity);

var mi = t.GetMethod("set_CreatedOn", BindingFlags.Instance | BindingFlags.NonPublic);

我想我可以做到,但我无法解决。


小唯快跑啊
浏览 356回答 3
3回答

慕慕森

t.GetProperty("CreatedOn")    .SetValue(obj, new DateTime(2009, 10, 14), null);编辑:由于财产本身是公共的,您显然不需要使用BindingFlags.NonPublic它来查找它。SetValue尽管设置者的可访问性较差,但仍然进行呼叫仍会达到您的期望。
打开App,查看更多内容
随时随地看视频慕课网APP