c# - 关于C#中属性的两个问题

标签 c# properties

我有两个简单的问题,基于我正在扩展现有类的事实...

1) 我正在实现一些自定义属性,我希望每当它们的值发生变化时调用一个特定的(无参数)函数。当然,如果不需要调用函数我可以使用传统的 { get;放; } 语法,不需要额外的变量。然而,即使我在 set 访问器中唯一修改的是对另一个函数的调用,我也必须声明一个私有(private)变量,以便我可以指定 getset 访问器我自己......没有声明这么多变量的更简单的方法吗?不是有类似general“属性变更”事件吗?

2) 因为我正在覆盖 .NET 用户控件,所以我想更改某些基本属性出现的类别。目前,为了使用 [Category("")] 语法,我必须将这些属性声明为 new 并实现 getset 引用基类的属性。有没有一种简单的方法可以做到这一点?

最佳答案

也许你应该看看 INotifyPropertyChanged界面。下面是一些使用它的示例代码。我使用这个接口(interface)来完成 WPF 中的数据绑定(bind)。您可以处理该事件,发现发生变化的属性并采取相应行动。如果您希望 setter 是异步的,您甚至可以在另一个线程 (PropertyChanged.BeginInvoke()) 上引发事件...

using System;
using System.ComponentModel;

public class Foo : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private string _name;
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
            RaisePropertyChanged("Name");
        }
    }
}

关于c# - 关于C#中属性的两个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5017599/

相关文章:

c# - 使用 dotnet core 解压缩 .taz 文件

c# - 使用 $.ajax 同时运行多个 WebRequest

.net - 反射和复数属性

java - 将两个 ToggleButtons 绑定(bind)到一个 BooleanProperty

java - 如何以编程方式设置java中动态库的加载路径?

c# - WPF 工具包 DataGrid SelectionChanged 获取单元格值

c# - "List<int>[,]"和 "List<List<int>>"之间的区别

c# - F# 有自由函数吗?

c# - 应用程序设置与应用程序设置。应用程序设置已过时?

properties - JavaFX:使用常量字符串前缀绑定(bind) StringProperty