gpt4 book ai didi

c# - 派生类无法使用 PropertyDescriptorCollection.SetValue 访问 protected setter

转载 作者:行者123 更新时间:2023-11-30 21:09:04 25 4
gpt4 key购买 nike

我已经在我的基类中设置了我的一个属性,使其具有 protected setter。这工作正常,我能够在派生类的构造函数中设置属性 - 但是当我尝试使用 PropertyDescriptorCollection 设置此属性时,它不会设置,但是使用集合适用于所有其他属性。

我应该提一下,当我删除 protected 访问修饰符时,一切正常......但当然现在它不 protected 。感谢您的任何输入。

 class base_a
{

public string ID { get; protected set; }
public virtual void SetProperties(string xml){}
}

class derived_a : base_a
{
public derived_a()
{
//this works fine
ID = "abc"
}
public override void SetProperties(string xml)
{
PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(this);
//this does not work...no value set.
pdc["ID"].SetValue(this, "abc");

}
}

最佳答案

TypeDescriptor 不知道您是从一个应该可以访问该属性 setter 的类型调用它的,因此您正在使用的 PropertyDescriptor 是只读的(您可以通过检查 its IsReadOnly property 来验证这一点)。当您尝试设置只读 PropertyDescriptor 的值时,没有任何反应。

要解决这个问题,请使用法线反射:

var property = typeof(base_a).GetProperty("ID");

property.SetValue(this, "abc", null);

关于c# - 派生类无法使用 PropertyDescriptorCollection.SetValue 访问 protected setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9249981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com