在抽象基础-class中向下转换它,有什么办法可以强制它吗?

Downcasting this in an abstract base-class, is there any way to force it?

当派生类型在那里实际已知时(由于复杂的泛型),是否有强制在抽象基础中进行向下转换的方法-class?

现在我丑陋的解决方法是实现一个抽象的保护 属性 This that simply return this...所以关于向下转型的通常的事情是不可能的,因为 "missing extra parts" dont申请,所有部分都在那里,我只需要强制类型系统让我放松一下:/

protected abstract T This { get; }

知道 派生类型,我就是找不到任何方法强制转换发生! 有什么办法吗?

(这是框架的一部分,因此强迫消费者实现诸如 This-属性 之类的愚蠢事情真的很糟糕。我宁愿让内部工作更复杂,并迫使消费者尽可能少地编写代码尽可能。)

编辑: 由于很难看出这样做有什么好处,我将尝试添加更多代码。也许它看起来仍然很奇怪,如果需要我会尝试再次添加。

基本上在代码的这个特定问题部分,它涉及这种方式的两种方法(省略实际实现细节,仅作说明)

abstract class Base<DerivedType, OtherType>
    where .... //Complicated constraints omitted
{
    protected abstract OtherType Factory(DerivedType d);

    public bool TryCreate(out OtherType o)
    {
        //Omitted some dependency on fields that reside in the base and other stuff
        //if success...
        o = Factory((DerivedType)this); //<-- what I can not do
        return true;
    }
}

(至于更大的图景,它是强类型替代方案的一部分,可以在 Linq2Xml 之上使用 xpath 执行某些操作。)

下面的class定义编译。不知道你省略的约束会不会和这个冲突

public abstract class Base<DerivedType, OtherType> 
      where DerivedType : Base<DerivedType, OtherType>
{
    protected abstract OtherType Factory(DerivedType d);

    public bool TryCreate(out OtherType o)
    {
       o = Factory ((DerivedType)this);
       return true;
    }
 }

public  class MyClass : Base<MyClass, string>
{
   protected override string Factory (MyClass d)
   {
      return d.GetType ().Name;
   }
}