gpt4 book ai didi

c# - CanRead 和 CanWrite 对于 PropertyInfo 意味着什么?

转载 作者:行者123 更新时间:2023-11-30 13:23:34 26 4
gpt4 key购买 nike

我正在编写一个类,它根据属性的可访问性为属性生成 WPF 绑定(bind)。这是关键方法:

static Binding getBinding(PropertyInfo prop)
{
var bn = new Binding(prop.Name);
bn.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
if (prop.CanRead && prop.CanWrite)
bn.Mode = BindingMode.TwoWay;
else if (prop.CanRead)
bn.Mode = BindingMode.OneWay;
else if (prop.CanWrite)
bn.Mode = BindingMode.OneWayToSource;
return bn;
}

但是,这并没有按预期工作。 CanWrite 在应该为 false 时为 true。例如,对于此属性:

abstract class AbstractViewModel {
public virtual string DisplayName { get; protected set; }
}

class ListViewModel : AbstractViewModel {
//does not override DisplayName
}

我发现 ListViewModelDisplayName 属性是 CanReadCanWrite。但是,如果我调用 prop.GetAccessors(),则只会列出 get_DisplayName() 访问器。

这是怎么回事?如果不是属性的保护级别,CanReadCanWrite 表示什么?我的方法的正确实现是什么?

最佳答案

What do CanRead and CanWrite indicate?

如果您有这样的问题,您应该首先查看文档。

CanRead :

If the property does not have a get accessor, it cannot be read.

CanWrite :

If the property does not have a set accessor, it cannot be written to.

因此,这些属性指示是否存在 getset 访问器,而不是它们的保护级别。原因之一是 Reflection 不知道您从哪里调用它,因此它不知道您是否真的可以访问访问器。

你可以做的是找出你是否可以访问访问器是调用GetGetMethod()GetSetMethod() .如果该属性没有公共(public) get/set 访问器,它们将返回 null

关于c# - CanRead 和 CanWrite 对于 PropertyInfo 意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10461547/

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