如何实现通用抽象功能?

时间:2019-05-09 11:19:22

标签: c#

问题比问题看上去要复杂得多。我有一个抽象类。而且我希望它具有一个抽象函数,但是使用类的返回类型和参数类型来实现它。

所以我想要类似的东西:

vector<int> smallestLexo(vector<int> s, int k) {
    deque<int> dq;
    for(int i = 0; i < s.size(); i++) {
        while(!dq.empty() && s[i] < dq.back() && (dq.size() + (s.size() - i - 1)) >= k) {
            dq.pop_back();
        }
        dq.push_back(s[i]);
    }
    return vector<int> (dq.begin(), dq.end());
}

所以我可以再上一个课

public abstract class Class
{
    public abstract T DoSomething(T variable) where T : Class;
}

这可能吗?

1 个答案:

答案 0 :(得分:4)

是的,您需要将通用参数限制为基本类型。

public abstract class MyClass<T> where T : MyClass<T>
{
    public abstract T DoSomething(T variable);
}

public class MyDerivedClass : MyClass<MyDerivedClass>
{
    public override MyDerivedClass DoSomething(MyDerivedClass variable)
    { ... }
}

这有点类似于self-referencing generic pattern