在C#中,ComponentModel命名空间提供了许多用于组件和控件的属性和事件的特性和接口。以下是一些常见的用法示例:
using System.ComponentModel; // 创建一个组件 MyComponent myComponent = new MyComponent(); // 获取组件的属性 PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(myComponent); foreach (PropertyDescriptor property in properties) { Console.WriteLine(property.Name + ": " + property.GetValue(myComponent)); }
using System.ComponentModel; // 自定义一个类型转换器 public class MyConverter : TypeConverter { // 重写CanConvertFrom方法,指定可以从字符串转换为该类型 public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { return sourceType == typeof(string); } // 重写ConvertFrom方法,实现从字符串到该类型的转换 public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { string strValue = value as string; if (strValue != null) { // 进行转换逻辑 return new MyType(strValue); } return base.ConvertFrom(context, culture, value); } } // 使用类型转换器 [TypeConverter(typeof(MyConverter))] public class MyType { public MyType(string value) { // 初始化逻辑 } }
using System.ComponentModel; // 创建一个实现了INotifyPropertyChanged接口的类 public class MyViewModel : INotifyPropertyChanged { private string _name; public string Name { get { return _name; } set { if (_name != value) { _name = value; OnPropertyChanged(nameof(Name)); } } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } // 使用属性更改通知 MyViewModel viewModel = new MyViewModel(); viewModel.PropertyChanged += (sender, e) => { if (e.PropertyName == nameof(viewModel.Name)) { Console.WriteLine("Name属性已更改"); } }; viewModel.Name = "John";
这只是ComponentModel命名空间提供的一些常见用法示例,还有许多其他特性和接口可用于组件和控件的开发。