簡體   English   中英

在C#中為不同的類使用類型變量

[英]Use typed variable for different classes in C#

我在C#app中有兩個ServiceReference( 通過VisualStudio生成 ):ServiceReference1和ServiceReference2。

兩者都有相同的方法和類名。 它們的接口在某些方法上有所不同,但我只想使用兩者都具有相同接口的方法。

如何動態使用它們?

例:

ServiceReference1.Client clnt1 = new ServiceReference1.Client();
ServiceReference2.Client clnt2 = new ServiceReference2.Client();

string result = "";    
if (type == 1)
   result = clnt1.calculate();
else
   result = clnt2.calculate();

string result2 = "";    
if (type == 1)
   result2 = clnt1.calculate2();
else
   result2 = clnt2.calculate2();

//and so on...

我正在尋找這樣的東西......

ServiceReference1.Client clnt = null;
if (type == 1)
    clnt = new ServiceReference1.Client();
else
    clnt = new (ServiceReference1.Client)ServiceReference2.Client();

string result = clnt.calculate();   
string result2 = clnt.calculate2();  
//and so on...

由於ServiceReference1.Client擁有的所有的方法ServiceReference2.Client (多一些),我認為這是可能的。 但它不起作用。

clnt變量使用var也不起作用,因為客戶端是在類中全局定義的, var只能在方法中使用。

我不知道你是如何生成這些的,但是大多數時候從Visual Studio生成代碼時,將類聲明為部分類是足夠聰明的。

Visual Studio生成的代碼

public partial class ServiceReference1
{
    public string Calculate()
    {
        // Implementation
    }
}

public partial class ServiceReference2
{
    public string Calculate()
    {
        // Implementation
    }
}

如果是這種情況,您可以做的是將自己單獨的部分類文件添加到項目中以擴展它們。 在新文件中,您可以使這些類實現一個通用接口。

你的守則

public partial class ServiceReference1 : IServiceReference
{
    // Nothing needed here
}

public partial class ServiceReference2 : IServiceReference
{
    // Nothing needed here
}

public interface IServiceReference
{
    string Calculate();
}

然后你可以像這樣打電話給他們:

IServiceReference clnt = null;
if (type == 1)
    clnt = new ServiceReference1.Client();
else
    clnt = new ServiceReference2.Client();

string result = clnt.Calculate(); 
//and so on...

暫無
暫無

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

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