我希望類有一個名爲GetProduct的強制靜態方法,以便客戶端代碼可以接受類型並在檢查傳入類型實現名爲ICommandThatHasProduct的接口後安全地調用該靜態方法。在類型上實現靜態方法
看來,這是不可能的,所以現在我正在尋求幫助找到一種方法,我可以實現這一點。我知道我可以使用反射來查看我傳遞的類型是否包含一個名爲「GetProduct」的方法,但我希望有更多的面向對象的方法(即使用繼承)。
任何幫助將不勝感激!下面的代碼是僞c#,絕對不會編譯。
public interface ICommandThatHasProduct
{
object GetProduct(int id);
}
public abstract class Command : ICommandThatHasProduct
{
// I want to be able to make the GetProduct method static
// so that calling code can safely call it
public static object GetProduct(int id)
{
// do stuff with id to get the product
}
public object Execute()
{
CommandWillExecute();
}
public abstract object CommandWillExecute();
}
public class Program
{
public Program(Type type, int productId)
{
if(type == ICommandThatHasProduct)
{
// Create the args
var args = object[1]{ productId };
// Invoke the GetProduct method and pass the args
var product = type.InvokeMethod("GetProduct", args);
//do stuff with product
}
throw new Execption("Cannot pass in a Command that does not implement ICommandHasProduct");
}
}
'static'方法並不真正適用於一般的面向對象的概念。 – 2012-01-17 03:15:05
有沒有靜態繼承,所以反射可能是唯一的方法 – BrokenGlass 2012-01-17 03:16:10
可能重複的[c#:繼承/接口靜態成員?](http://stackoverflow.com/questions/1128361/c-inherited-interface-static-member )事實上,幾乎所有的[這些問題](http://stackoverflow.com/search?q=%5Bc%23%5D+static+interface)已經解決了這個問題。 – 2012-01-17 03:26:11