我有一个名为IStrategy的接口
public interface IStrategy
{
}我有另一个名为IClickStrategy的接口,它继承自IStrategy。它有一个名为GetClicks()的方法
public interface IClickStrategy : IStrategy
{
void GetClicks(string[] args);
}以及从IClickStrategy继承并实现GetClicks()方法的类:
public class UnionenClicksController : IClickStrategy
{
Models.DMDelivery.Unionen model;
Logger logger;
public UnionenClicksController()
{
this.model = new Models.DMDelivery.Unionen();
this.logger = new Logger();
}
public void GetClicks(string[] args)
{
...
}
}在我的主要方法上,取决于策略的类型,我想在我拥有的一切之前决定do.So的内容:
IStrategy strategy = null;然后,如果输入参数想获得单击信息,我想从类UnionenClicksController().调用GetClicks函数。

但是可以看到,我看不到GetClicks()函数。但是,如果我将策略更改为IClickStrategy,,那么它将看到我的GetClicks。但这不是我想要的,因为我可能有一个不同的策略,而不是点击,我不想在我的主要方法开始声明它。
我做错什么了?谢谢。
发布于 2013-05-30 12:10:24
IStrategy不包含GetClicks,它可以在IClickStrategy接口中找到。
变化
IStrategy strategy = null;至
IClickStrategy strategy = null;你也可以试着把它转换到适当的界面,
如果您确信它实现了正确的接口:
((IClickStrategy)strategy).GetClicks();如果你不确定:
var s = strategy as IClickInterface;
if (s != null)
{
s.GetClicks();
}发布于 2013-05-30 12:11:59
您必须对每种情况进行强制转换,或者在IStrategy中有一个选择正确方法的虚拟方法。
如果一个对象实现多个策略,则后一种解决方案是不可能的。
发布于 2013-05-30 12:14:20
IStrategy strategy = null;
.
.
. later on you find that you need to see if it contains a IClickStrategy ..
.
IClickStrategy clicker = strategy as IClickStrategy;
if(clicker != null) {
clicker.GetClicks(...);
}https://stackoverflow.com/questions/16835741
复制相似问题