簡體   English   中英

如何實現通用 c# 接口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM