首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以检查一个属性是否有引用另一个对象的Setter?

是否可以检查一个属性是否有引用另一个对象的Setter?
EN

Stack Overflow用户
提问于 2017-02-07 10:18:21
回答 3查看 530关注 0票数 0

在C#中,是否可以检查一个属性是否有一个在运行时引用另一个对象的Setter?

下面是一些代码:

代码语言:javascript
运行
复制
private PropertyChanged _propertyChanged;
public string PropertyChangedName
{
    get
    {
        return _propertyChanged.Name;
    }
    set
    {
        _propertyChanged.Name = value;
    }
}

在上面的代码中,PropertyChangedName被作为PropertyChanged对象的一部分引用。设置PropertyChangedName时,将设置_propertyChanged.Name。

下面是一些代码,其中PropertyChangedName未作为PropertyChanged对象的一部分进行引用:

代码语言:javascript
运行
复制
private string _propertyChangedName;
public string PropertyChangedName
{
    get
    {
        return _propertyChangedName;
    }
    set
    {
        _propertyChangedName = value;
    }
}
EN

回答 3

Stack Overflow用户

发布于 2017-02-07 10:57:40

我不确定这是不是最好的方法,但是,它可能会对你有所帮助:

代码语言:javascript
运行
复制
// store the current state:
var valuesbefore = new List<object>();
foreach (var r in this.GetType().GetFields(System.Reflection.BindingFlags.NonPublic))
    valuesbefore.Add(r.GetValue(this));

// change the value the specified property
PropertyChangedName = PropertyChangedName + "a"; 

//get the new state of the class:
var valuesnow = new List<object>();
foreach (var r in this.GetType().GetFields(System.Reflection.BindingFlags.NonPublic))
    valuesnow.Add(r.GetValue(this));

// check for any change
bool equal = valuesbefore.SequenceEqual(valuesnow);

如果equal值为false,则意味着您正在处理setter更改private字段的值的情况。请注意,在处理string、int等以外的类型时需要特别小心。

票数 0
EN

Stack Overflow用户

发布于 2017-02-07 11:54:57

您可以实现INotifyPropertyChanged并订阅它。

票数 0
EN

Stack Overflow用户

发布于 2017-02-07 13:15:21

这是一个非常棘手的问题。.NET中的System.Reflection库允许您观察类签名(类型、字段、方法等),调用它们并获取它们的值;但不能在它们的主体中看到它们。

通读this question中的答案,了解一些检查方法内容的选项。(属性只是一个方法--如果同时具有getset,则为两个)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42080591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档