我有大量的类继承大量的接口。这些类正在实现的接口不共享任何公共方法,但它们都共享一个公共的第一步。一个例子是:
A类看起来像这样:
class A : InterfaceA
{
GetFoo(Database db)
{
PerformSetup(db); // This is the common first step.
// Do foo things
}
}
B 类可能看起来像这样:
class B : InterfaceB
{
GetBar(Database db)
{
PerformSetup(db); // This is the common first step.
// Do bar things
}
}
现在显然我可以使用 PerformSetup 方法创建一个基类,并让所有这些方法调用它。但我的问题是有very许多方法,并且对 PerformSetup() 的调用需要存在于所有方法中,但尚未存在于任何方法中。
因此,我当然可以将该设置代码复制粘贴到每个方法的开头,但为了 DRY 和我自己的时间,我想知道是否有某种方法可以确保在任何 (如果可能的话,仅公开)方法调用?我可以以某种方式利用事件吗?再次记住,没有类共享公共接口,并且许多接口方法除了数据库参数之外还具有参数,但它们都具有数据库参数。
这可能有点不可思议,但我总是很好奇人们能够用 C# 装配出什么疯狂的装置。
两个可能的答案:
- Use 后锐利 http://www.postsharp.net/aspects/method-decorator。虽然要花钱,但我想它确实有效。
- 您可以使用反射来调用
PerformSetup
调用方法之前的方法
基本上你可以用以下内容创建一个基类
class Base
{
public void InvokeMethodWithSetup(string method, Database db, params object[] args)
{
PerformSetup(db);
var method = this.GetType().GetMethod(method);
method.Invoke(this, args);
}
public void PerformSetup(Database db)
{
// stuff
}
}
不幸的是,这意味着要调用您的方法之一来替换调用代码,所以我不知道这是否会使它变得更容易,但至少它使您不必修改所有方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)