我有大量继承自大量接口的类。这些类正在实现的接口不共享任何常用方法,但它们都共享一个共同的第一步。举例说明如下:
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创建一个基类,并让所有这些方法调用它。但我的问题是非常许多方法,并且对PerformSetup()的调用需要在所有这些方法中,但它们中的任何一个都没有。
所以我当然可以将设置代码复制粘贴到每个方法的开头,但为了DRY和我自己的时间,我想知道是否有某种方法可以确保自动调用此方法在任何(仅限公众)方法调用之前?我可以以某种方式利用事件吗?请记住,没有类共享一个公共接口,并且许多这些接口方法除了Database参数之外还有参数,但它们都有数据库参数。
这可能有点奇怪,但我总是很想知道人们能够在C#中安装什么疯狂的装置。
答案 0 :(得分:1)
两个可能的答案:
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
}
}
这很遗憾地意味着到处都会调用你的一个方法来替换调用代码,所以我不知道这是否会使它更容易,但至少它可以节省你必须修改所有方法。