这个问题有两个部分。
- 最好每个对象具有一个特定于事件的函数或结合对象事件,如果是,
- 使用哈希代码来定义发件人对象并进行比较以找出有效的更新?
示例在下面的代码。
我的事件功能:
private void GeneralEventHandler(object sender, EventArgs e){
var senderHash = sender.GetHashCode();
if (senderHash == tbDatabase.GetHashCode())
Settings.DB.Default.Database = tbDatabase.Text;
else if (senderHash == tbSchema.GetHashCode())
Settings.DB.Default.Schema = tbSchema.Text;
}
我的对象定义:
// tbDatabase
/
this.tbDatabase.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.tbDatabase.Location = new System.Drawing.Point(62, 3);
this.tbDatabase.Name = "tbDatabase";
this.tbDatabase.Size = new System.Drawing.Size(210, 20);
this.tbDatabase.TabIndex = 0;
this.tbDatabase.LostFocus += new System.EventHandler(this.GeneralEventHandler);
//
// tbSchema
//
this.tbSchema.Location = new System.Drawing.Point(55, 3);
this.tbSchema.Name = "tbSchema";
this.tbSchema.Size = new System.Drawing.Size(217, 20);
this.tbSchema.TabIndex = 1;
this.tbSchema.LostFocus += new System.EventHandler(this.GeneralEventHandler);
我主要仅使用它即时更新用户设置。我将设置文件保存在退出中。
我更喜欢让每个对象都有自己的事件处理程序。每个处理程序依次调用一种"执行契约"的方法,而不知道谁打电话给它。如果几个对象"做同一件事"让他们称其为相同的" do-it"方法。
您永远都不知道未来会带来什么 - 与事件处理程序组合的对象现在可以在他们将来需要做的事情差异。