如何使用泛型引用当前类类型

2024-02-06

我有一个带有方法的基类,我想在其中使用泛型来强制编码器在当前类上使用泛型表达式:

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(使用前将#替换为@)

如何使用泛型引用当前类类型 的相关文章

随机推荐