我有以下课程:
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 中执行非虚拟成员,因为它是类型参数。
我确信有办法做到这一点,但我无法弄清楚。
根据 @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)
}
}