我想标题并没有太多说明,这里是解释。
我有一个父类,我希望它能够包含一个事件Action,其中T是任何子类继承它的类型。
例如,像这样:
abstract class ActiveRecord
{
protected event Action<T> NewItem;
}
class UserRecord : ActiveRecord
{
public UserRecord()
{
NewItem += OnNewItem; // NewItem would in this case be Action<UserRecord>
}
private void OnNewItem(UserRecord obj)
{
// Flush cache of all users, since there's a new user in the DB.
}
}
所以问题是,上述是否可行,我在父类中应该使用什么作为T?
请注意,我不希望将一个通用参数传递给我的父类,因为这看起来真的很愚蠢,会影响可读性。
class UserRecord : ActiveRecord<UserRecord>
我正在开发一种基于继承的ORM,以防你想知道它是用来干什么的。每当ORM将数据插入数据库时,都会触发NewItem事件。
编辑:试图更好地澄清,使用正确的类命名。
ActiveRecord类位于一个单独的程序集中,而UserRecord位于我正在工作的Web项目中。(注意:我是两个部分的开发人员,但这是两个不同的项目)
我希望能够在成功插入行、删除行等操作时引发事件。事件应将相关记录作为参数传递给事件处理程序,因此需要Action。
然而,由于我在基类(ActiveRecord)中声明了这些事件,所以我需要一种方法将子类型传递给事件处理程序,以便获得强类型对象。
当然,我可以使用Action,然后在我的实现中进行类型转换,但这真的不太好 :-(
希望这样能更清楚地解决问题,否则请问一下 :-)
编辑2:只是想让你知道反射、动态方法或类似的东西是一个选项,如果有帮助的话。但是我对这个特定的场景表示怀疑 :-(