-1

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

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
    }
}

因此,ClassA两者ClassB都实现了相同的接口,并且都具有相同的样板代码,它们需要运行 - 在这种情况下,只需MyData = myData;为它们都实现的接口设置公共属性(...),因为它们已经从其他接口继承,不同的类,我不能创建一个抽象类来让它们继承。

显然,这是一个非常简单的示例,但是,假设我的所有实现类都有一些非常具体的样板代码它们需要运行,我怎样才能使它只需要在一个位置编写样板代码并且不要不需要在每个实现中编写相同的代码?

4

1 回答 1

0

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

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

然后从ClassAandClassB构造函数中,我会调用这个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, ...);
    }
}

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

于 2021-09-29T18:55:36.253 回答