将派生类型作为参数传递给抽象类
本文关键字:参数传递 抽象类 派生 类型 | 更新日期: 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;
}