我有大量的类继承于大量的接口(interface)。这些类正在实现的接口(interface)不共享任何公共(public)方法,但它们都共享一个公共(public)的第一步。这方面的一个例子是:
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 和我自己的时间,我想知道是否有某种方法可以确保自动调用该方法在任何(如果可能的话,仅公开)方法调用之前?我可以以某种方式利用事件吗?再次记住,没有类共享公共(public)接口(interface),并且许多接口(interface)方法除了数据库参数之外还有参数,但它们都具有数据库参数。
这可能有点不可思议,但我总是很好奇人们能够用 C# 装配出什么疯狂的装置。
最佳答案
两个可能的答案:
- 使用PostSharp 。虽然要花钱,但我想它是有效的。
- 您可以在调用方法之前使用反射来调用
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
}
}
不幸的是,这意味着要调用您的方法之一来替换调用代码,所以我不知道这是否会让事情变得更容易,但至少它使您不必修改所有方法。
关于c# - 在任何其他方法调用之前自动调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18134404/