将派生类型作为参数传递给抽象类

本文关键字:参数传递 抽象类 派生 类型 | 更新日期: 2023-09-27 18:09:52

我想知道是否有可能在c#中实现与下面代码类似的签名:

public abstract class baseClass
{
    public abstract float function(derivedType a, derivedType b);
}
public class derived: baseClass
{
    public override float function(derived a, derived b)
    {
        return something to do with a and b;
    }
}

希望你能明白我想要做什么,谢谢。

编辑:我尝试了下面没有成功,希望它也可以澄清我想做什么:

public abstract class baseClass
{
    public abstract float function<T>(T a, T b) where T:baseClass;
}
public class derived: baseClass
{
    public override float function<derived>(derived a, derived b)
    {
        return a.value + b.value;
    }
    public float value;
}

显然,根据visual studio, derived没有包含'value'的定义。

编辑解决方案:

public abstract class baseClass<T> where T: baseClass<T>
{
    public abstract float function(T a, T b);
}
public class derived : baseClass<derived>
{
    public override float function(derived a, derived b)
    {
        return a.value + b.value;
    }
    public float value;
}

谢谢大家的帮助

将派生类型作为参数传递给抽象类

如果我理解正确的话,你所要做的就是:

public abstract class baseClass<T> where T : baseClass<T>
{
    public abstract float Foo(T a, T b);
}
public class derived : baseClass<derived>
{
    public override float Foo(derived a, derived b)
    {
        throw new NotImplementedException();
    }
    public float value;
}