2

我有大量从大量接口继承的类。这些类正在实现的接口不共享任何通用方法,但它们都共享一个通用的第一步。一个例子是:

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 和我自己的时间,我想知道是否有某种方法可以确保在任何方法之前自动调用此方法 (如果可能,仅公开)方法调用?我能以某种方式利用事件吗?再次记住,没有类共享一个公共接口,并且这些接口方法中的许多除了数据库参数之外还有参数,但它们都具有数据库参数。

这可能有点不可思议,但我总是很想知道人们能够在 C# 中安装哪些疯狂的装置。

4

1 回答 1

1

两个可能的答案:

  1. 使用PostSharp。它需要花费,但我想它有效。
  2. 您可以在调用方法之前使用反射来调用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
    }
}

不幸的是,这意味着去任何地方调用你的方法之一来替换调用代码,所以我不知道这是否使它更容易,但至少它节省了你修改所有方法的时间。

于 2013-08-08T21:24:04.480 回答