Saya hanya ingin menunjukkan bahwa terkadang delegasi memecahkan masalah ini, tergantung pada konteksnya.
Jika Anda perlu memanggil metode statis sebagai semacam pabrik atau metode inisialisasi, Anda dapat mendeklarasikan delegasi dan meneruskan metode statis ke pabrik generik yang relevan atau apa pun yang membutuhkan "kelas generik dengan metode statis ini".
Sebagai contoh:
class Factory<TProduct> where TProduct : new()
{
public delegate void ProductInitializationMethod(TProduct newProduct);
private ProductInitializationMethod m_ProductInitializationMethod;
public Factory(ProductInitializationMethod p_ProductInitializationMethod)
{
m_ProductInitializationMethod = p_ProductInitializationMethod;
}
public TProduct CreateProduct()
{
var prod = new TProduct();
m_ProductInitializationMethod(prod);
return prod;
}
}
class ProductA
{
public static void InitializeProduct(ProductA newProduct)
{
// .. Do something with a new ProductA
}
}
class ProductB
{
public static void InitializeProduct(ProductB newProduct)
{
// .. Do something with a new ProductA
}
}
class GenericAndDelegateTest
{
public static void Main()
{
var factoryA = new Factory<ProductA>(ProductA.InitializeProduct);
var factoryB = new Factory<ProductB>(ProductB.InitializeProduct);
ProductA prodA = factoryA.CreateProduct();
ProductB prodB = factoryB.CreateProduct();
}
}
Sayangnya Anda tidak dapat memaksakan bahwa kelas memiliki metode yang tepat, tetapi Anda setidaknya dapat mengkompilasi-waktu-menegakkan bahwa metode pabrik yang dihasilkan memiliki semua yang diharapkan (yaitu metode inisialisasi dengan tanda tangan yang tepat). Ini lebih baik daripada pengecualian refleksi waktu proses.
Pendekatan ini juga memiliki beberapa keuntungan, yaitu Anda dapat menggunakan kembali metode init, menjadikannya metode instance, dll.