作為一個非常簡單的例子,假設我有以下 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;因為它們都實作和介面...),因為他們已經從其他繼承,不同的類,我不能創建一個抽象類來讓它們繼承。
顯然,這是一個非常簡單的例子,但是,假設我所有的實作類都有一些他們需要運行的非常具體的樣板代碼,我該如何做到這一點,以便我只需要在一個位置撰寫樣板代碼,而不是不需要在每個實作中撰寫相同的代碼?
uj5u.com熱心網友回復:
您可以使用共享靜態方法執行此操作:
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, ...);
}
}
我會避免使用默認介面實作,因為它依賴于虛擬機制,并且不鼓勵在建構式中呼叫虛擬內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314629.html
