gpt4 book ai didi

c# - 在运行时替换 Property Setter 方法

转载 作者:太空狗 更新时间:2023-10-29 23:03:39 25 4
gpt4 key购买 nike

我有许多对象都共享一个公共(public)基类,我希望拦截所有设置属性值的调用并记录这些是否已在每个实例的基础上设置。

我能否在运行时用反射替换属性的 Set 方法?

最佳答案

一种方法是使属性成为虚拟属性,并在运行时通过反射发射创建一个子类来覆盖属性,添加您的代码。然而,这是高级的,并且要求您始终确保创建子类(因此代码中没有"new")。

但是;我想知道简单地实现 INotifyPropertyChanged 和处理事件是否更简单。另一种选择是首先将处理构建到常规类中。有一些方法可以减少重复,特别是如果你有一个公共(public)基类,你可以在其中添加一个

protected void SetField<T>(ref T field, T value)
{
if(!EqualityComparer<T>.Default.Equals(field,value))
{
field = value;
// extra code here
}
}

private int foo;
public int Foo {
get { return foo; }
set { SetField(ref foo, value); }
}

关于c# - 在运行时替换 Property Setter 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4352537/

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