Я хочу, чтобы класс имел принудительный статический метод с именем 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");
}
}