簡體   English   中英

如何在C#中實現在接口上返回特定類型的通用方法

[英]How to implement a generic method that returns a specific type on an interface in C#

我正在開發幾個WCF Http Web服務。 所有這些WCF Web服務都具有相同的操作,但是對於給定的操作,每個WCF Web服務都返回不同的類型。

例如,有兩個服務ServiceAServiceB ,都具有操作GetData 但是,對於ServiceAGetData操作必須返回一個int ,對於ServiceBGetData操作必須返回一個string

ServiceA接口:

[ServiceContract]
public interface IServiceA
{
    [OperationContract]
    int GetData();
}

ServiceA實施:

public class ServiceA : IServiceA
{
    public int GetData()
    {
        return 0;
    }
}

ServiceB接口:

[ServiceContract]
public interface IServiceB
{
    [OperationContract]
    string GetData();
}

ServiceA實施:

public class ServiceB : IServiceB
{
    public string GetData()
    {
        return "any text";
    }
}

WCF Web服務需要正確公開元數據,我的意思是,它們必須公開GetData操作返回的數據類型( intstring ),以便告訴服務使用者期望的數據類型。 換句話說,具有XSD模式。

如您所知,當您創建新的WCF Web服務時,VS將創建一個用於聲明操作的接口,並聲明所需的[ServiceContract][OperationContract]屬性,並創建實現該接口的類。

為了使代碼標准化並節省一些時間來鍵入接口的實現,我想創建一個所有WCF Web服務都通用的接口,該接口將通用操作(例如GetData )聲明為通用,然后在實施。

我想做這樣的事情:

通用接口:

[ServiceContract]
public interface IServiceCommon
{
    [OperationContract]
    T GetData<T>();
}

ServiceA接口:

[ServiceContract]
public interface IServiceA : IServiceCommon
{

}

ServiceA實施:

public class ServiceA : IServiceA
{
    public int GetData()
    {
        return 0;
    }
}

但是,我收到以下錯誤:

“ ServiceA”未實現接口成員“ IServiceCommon.GetData()”

如何實現在GetData方法上返回任何類型值的任何服務類?

在撰寫本文時,我通過聲明以下接口來提出解決方案:

通用接口:

[ServiceContract]
public interface IServiceCommon<T>
{
    [OperationContract]
    T GetData();
}

ServiceA接口:

[ServiceContract]
public interface IServiceA : IServiceCommon<int>
{

}

ServiceA實施:

public class ServiceA : IServiceA
{
    public int GetData()
    {
        return 0;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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