为实现相同接口的 类 创建默认方法

Create default method for classes implementing the same interface

作为一个非常简单的示例,假设我有以下 C# classes 和代码:

public interface IMyInterface
{
    public string MyData { get; set; }
    public int MyValue { get; }
}

public class BaseClass1 { }
public class BaseClass2 { }

public class ClassA : BaseClass1, IMyInterface
{
    public string MyData { get; set; }
    public int MyValue { get; private set; }

    public ClassA(string myData, int myValue)
    {
        MyData = myData;
        MyValue = myValue;
        // SAME, specific, code relating to my interface implementation
    }
}

public class ClassB : BaseClass2, IMyInterface
{
    public string MyData { get; set; }
    public int MyValue { get; private set; }

    public ClassB(string myData, int myValue)
    {
        MyData = myData;
        MyValue = myValue;
        // SAME, specific, code relating to my interface implementation
    }
}

因此,ClassAClassB 都实现了相同的接口,并且都具有相同的样板代码,它们需要 运行 - 在这种情况下,只需简单地设置 public 属性 (MyData = myData;...) 它们都实现了接口,并且因为它们已经继承自其他不同的 classes,所以我无法创建抽象 class让他们继承自。

显然,这是一个非常简单的示例,但是,假设我的所有实施 classes 都有一些非常具体的样板代码,它们需要 运行,我该如何做到这一点我只需要在一个位置编写样板代码而不需要在每个实现中编写相同的代码?

您可以使用共享静态方法执行此操作:

public static class YourHelper
{
   public static void Initialize(IMyInterface foo, ...) ...
}

然后从 ClassAClassB 构造函数中,我将调用此 Initialize 方法。

public class ClassA : BaseClass1, IMyInterface
{
    public string MyData { get; set; }
    public int MyValue { get; private set; }

    public ClassA(string myData, int myValue)
    {
        MyData = myData;
        MyValue = myValue;
        MyHelper.Initalize(this, ...);
    }
}

我会避免使用默认接口实现,因为它会依赖虚拟机制并且不鼓励在构造函数中调用虚拟内容。