C#隐藏在“更改”和“更改”属性中的魔法,如数据列

时间:2015-10-05 00:02:12

标签: c# events dynamic properties

我正在尝试在.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 +属性/字段的结构,我不希望每次都对这些重复的东西进行编码。

是否有一些我明显没有意识到的快捷/编码实践?感谢。

0 个答案:

没有答案