如何从泛型类内部调用泛型类型的方法?

问题描述 投票:0回答:1

我有以下课程:

public abstract class TableStorageItem
{
    public TableStorageItem() { }
}
public abstract class TableStorage<T> where T : TableStorageItem, new()
{
    public async Task CheckInitializeAsync(CancellationToken cancellationToken = default)
    {
     ...
    }
}
public class TableStorageCleanerTask<T, U>
    where T : TableStorage<U>
    where U : TableStorageItem, new()
{
    public TableStorageCleanerTask() { }

    public async Task InitializeAsync(CancellationToken cancellationToken = default)
    {
        await T.CheckInitializeAsync(cancellationToken)
    }
}

我想从内部调用

CheckInitializeAsync
InitializeAsync
但我有这个 CS0704 编译器错误:

不能在 T 中执行非虚拟成员,因为它是类型参数。

我确信有办法做到这一点,但我无法弄清楚。

c# generics inheritance
1个回答
0
投票

根据 @Sweeper 的评论,

CheckInitializeAsync
方法不是静态的,因此不能针对该类调用;仅针对从类实例化的对象。

public class TableStorageCleanerTask<T, U>
    where T : TableStorage<U>
    where U : TableStorageItem, new()
{
    private TableStorage<U> tableStorage;
    public TableStorageCleanerTask(TableStorage<U> tableStorage)
    {
        this.tableStorage = tableStorage;
    }

    public async Task InitializeAsync(CancellationToken cancellationToken = default)
    {
        await tableStorage.CheckInitializeAsync(cancellationToken)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.