假设我有这样的课程:
public abstract class Foo
{
public void Access(Foo foo)
{
/*
if (foo is same type as implemented)
AccessIfSameImplementation(foo);
else
AccessIfDifferentImplementation(foo);
*/
}
protected abstract void AccessIfSameImplementation(Foo foo);
private void AccessIfDifferentImplementation(Foo foo)
{
//do stuff with the different implementations
}
}
因此,该方法Access
采用自身的类型,根据定义,它将是一个实现,我们并不真正关心它是什么,只要它继承自Foo
......但我希望这个方法检查传入的对象是否是与其实现相同的类型。
像这样:
public class Bar : Foo
{
protected override void AccessIfSameImplementation(Foo foo)
{
// TODO: How do I force foo to always be a Bar
// do specific Bar stuff
}
}
目前,我有一个Name
字段指示传入的foo.Name
值是否与当前值相同。Name
此外,我考虑过使用泛型,但再次认为这不是解决此问题的正确方法。
编辑:
关于我正在使用的实际结构的一些背景知识。
上面定义的Foo
类代表了创建一组对象的工厂,List<X> objs
这些对象由实现Foo
对象的属性生成。现在我有一些其他类比较这些工厂,但我不希望工厂因为生成它们而变得臃肿。因此,我不是*使工厂膨胀,而是检查它们是否具有相同的实现,如果是,则比较抽象比较器定义的属性,否则 *blowout。以后有时间我会补充的。
如果有人有更好的标题,请推荐一个。