Rob*_*ite 0 c# generics abstract-class casting
我想用一个采用泛型类型的抽象方法创建一个抽象类.我的实现类方法将使用该类型执行某些操作,但因为它的通用我无法访问方法中传递的真实对象的属性.如果我尝试进行转换,那么它将无法编译,因为您无法转换为T类型.我的意思的一个例子.
public abstract class TestAbstractClass
{
public abstract void Method<T>(ref IQueryable<T> query);
}
public class TestA:TestAbstractClass
{
// T in this class is an object with a property called Forename
public override void Method<T>(ref IQueryable<T> query)
{
query = query.OrderBy(o=>o.Forename); // unaware of property forename
query = ((IQueryable<Person>)query).OrderBy(o=>o.Forename); // breaks because of casting
}
}
public class TestB:TestAbstractClass
{
// T in this class is an object with a property called HandSize
public override void Method<T>(ref IQueryable<T> query)
{
query = query.OrderBy(o=>o.HandSize); // unaware of property
query = ((IQueryable<Glove>)query).OrderBy(o=>o.HandSize); // breaks because of casting
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这是有道理的,我不是傻瓜.
干杯
解决方案可能是:
public abstract class TestAbstractClass<T>
{
protected virtual void Method(ref IQueryable<T> query)
{
}
}
class TestA : TestAbstractClass<Person>
{
protected override void Method(ref IQueryable<Person> query)
{
var q = query.OrderBy(p => p.Forename);
}
}
Run Code Online (Sandbox Code Playgroud)