我有一个带有方法的基类,我想在其中使用泛型来强制编码器在当前类上使用泛型表达式:
public class TestClass
{
public void DoStuffWithFuncRef<T>(Expression<Func<T, object>> expression) where T : TestClass
{
this.DoStuffWithFuncRef(Property<T>.NameFor(expression));
}
}
现在,我想强制 T 为实例化类的类型,我希望这将使 C# 编译器自动理解要使用的泛型类型。例如。我想避免对下面的 doStuff 方法进行编码,我必须在其中指定正确的类型 - 而是使用 doStuffILikeButCannotGetToWork 方法:
public class SubTestClass : TestClass
{
public string AProperty { get; set; }
public void doStuff()
{
this.DoStuffWithFuncRef<SubTestClass>(e => e.AProperty);
}
public void doStuffILikeButCannotGetToWork()
{
this.DoStuffWithFuncRef(e => e.AProperty);
}
}
这可能吗?我应该以不同的方式做这件事吗?
使基类本身通用:
public class TestClass<T> where T : TestClass<T>
{
public void DoStuffWithFuncRef(Expression<Func<T, object>> expression)
{
this.DoStuffWithFuncRef(Property<T>.NameFor(expression));
}
}
并从中得出:
public class SubTestClass : TestClass<SubTestClass> {
// ...
}
如果您需要具有单个根的继承层次结构,请从另一个非泛型版本继承泛型基类:
public class TestClass { ... }
public class TestClass<T> : TestClass where T : TestClass<T>
当然,您应该将基类抽象化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)