我正在尝试在.net中学习一些潜在的“它是如何工作”的。一个这样的例子是DataTable.DataColumn。不知何故,在引擎盖下,您可以为任何类型的DataTable添加DataColumn(无关紧要)。但整个表显然具有“OnColumnChanging”和“OnColumnChanged”的控制/检测,这样当更改给定列的值时,如果您订阅
,则会自动触发这些事件。myDataTable.OnColumnChanging += myColumnChangingHandler;
myDataTable.OnColumnChanged += myColumnChangedHandler;
这很容易,但隐藏了基础过程的工作原理。
现在,我们来看一个班级和一些公共场所......
public class MyTestClass
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
在这个最简单的状态/声明中使用.net的getter / setter简写,我怎么会在这个类中使用一些泛型...“嘿,某些属性发生了变化”而没有为每个属性添加明确的附加代码而变成过度笨重的代码集。
我知道通过反射获取属性信息并做一些事情,比如设置和获取特定对象的值,但是每当它被改变时对每个属性启动一些验证......或者以更通用的方式抛出INotifyPropertyChanged而不是每个单独的属性声明中的显式代码,如
public class MyTestClass
{
private string _firstName;
public string FirstName
{
get { return _firstName; }
set {
CallSomeMethodChanging( "FirstName", _firstName, value );
_firstName = value;
CallSomeMethodChangeComplete( "FirstName", value );
}
public string LastName { ... similar specific getter/setter ... }
}
我确信所有额外的钩子,反射,可观察的东西等等,我只是错过了一些简单的东西。如果我有一个类甚至一个包含50-60 +属性/字段的结构,我不希望每次都对这些重复的东西进行编码。
是否有一些我明显没有意识到的快捷/编码实践?感谢。