[英]How to implement a generic c# interface
我無法理解我的問題是什么。 CS0452 錯誤,類型 T 必須是 ref 類型才能用作參數...
錯誤在這一行: Response<T> tableEntity = TC.GetEntity<T>(pk, rk);
using Azure;
using Azure.Data.Tables;
namespace AzureDataTables
{
public class AzureDataTables<T> : IAzureDataTables<T> where T : class, ITableEntity, new()
{
ITableEntity GetTableEntity(string pk, string rk);
}
public class AzureDataTables<T> : IAzureDataTables<T> where T : ITableEntity, new()
{
public T GetTableEntity(string pk, string rk)
{
var tableEntity = TC.GetEntity<T>(pk, rk);
return tableEntity.Value;
}
public TableServiceClient TSC { get; set; } = new TableServiceClient("");
public TableClient TC => TSC.GetTableClient("");
}
}
TableClient.GetEntity<T>()
對泛型類型有以下約束:
where T : class, ITableEntity, new();
您也缺少對自己的泛型類型的class
約束,以便能夠將其與該 function 一起使用。
如果接口的合同中有泛型類型,則需要在接口的實現中使用具體類型。 這是一個工作示例:
using Azure;
using Azure.Data.Tables;
namespace AzureDataTables
{
public interface IAzureDataTables<T> where T : class, ITableEntity, new()
{
ITableEntity GetTableEntity(string pk, string rk);
}
public class AzureDataTables<T> : IAzureDataTables<T> where T : class, ITableEntity, new()
{
public ITableEntity GetTableEntity(string pk, string rk)
{
Response<T> tableEntity = TC.GetEntity<T>(pk, rk);
return tableEntity.Value;
}
public TableServiceClient TSC { get; set; } = new TableServiceClient("");
public TableClient TC => TSC.GetTableClient("");
}
}
您正在調用的方法是TableClient.GetEntity這有一個約束where T: class, Azure.Data.Tables.ITableEntity, new();
.
您的方法沒有約束class
因此當編譯器檢查您的T
是否可用於方法時,它不符合所有約束。
如果你改變
public class AzureDataTables<T> : IAzureDataTables<T> where T : ITableEntity, new()
至
public class AzureDataTables<T> : IAzureDataTables<T> where T : class, ITableEntity, new()
它會編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.