作为一个非常简单的例子,假设我有以下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;
…)的接口,他们都实现,因为他们已经从其他不同的类继承,我不能创建一个抽象类让他们继承。
显然,这是一个非常简单的例子,但是,假设我所有的实现类都有一些非常具体的样板代码,它们需要运行,我如何才能使我只需要在一个位置编写样板代码,而不需要在每个实现中编写相同的代码?
您可以使用一个共享静态方法:
public static class YourHelper
{
public static void Initialize(IMyInterface foo, ...) ...
}
然后从ClassA
和ClassB
构造函数中,我将调用这个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, ...);
}
}
我将避免使用默认接口实现,因为它将依赖于虚拟机制,并且不鼓励在构造函数中调用虚拟对象。