繁体   English   中英

如何将类传递给方法参数为泛型的方法

[英]How to pass a class to a method where the methods parameter is a generic

下面的这个方法已经在我的项目中使用不同的界面编写了 12 次

ChannelFactory<interface>

和不同的“用户”。

var user = new SomeWebServiceReference.User();

下面的例子。

所以我想在一个类(不确定我需要什么)中创建一个通用的类或一个通用方法,它传入“WebServiceAWI”接口和任何其他接口(例如 WebServiceBW、WebServiceAWA)和一个“用户”,但我不知道该怎么做。

    // file 1
    public void TestSomething(string url)
    { 
        BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
        EndpointAddress endpoint = new EndpointAddress(url);

        var channelFactory = new ChannelFactory<WebServiceAWI>(binding, endpoint);

        var webservice = channelFactory.CreateChannel();

        var user = new User(); // from ServiceReferenceARM 
        user.UserName = webservice.EncryptValue("someone");
        user.Password = webservice.EncryptValue("password");

        WebServiceResult result = webservice.AttorneysGet(user);
    }

    // file 2
    public void TestSomething(string url)
    { 
        BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
        EndpointAddress endpoint = new EndpointAddress(url);

        var channelFactory = new ChannelFactory<WebServiceBW>(binding, endpoint);

        var webservice = channelFactory.CreateChannel();

        var user = new User(); // from ServiceReferenceBW
        user.UserName = webservice.EncryptValue("someone");
        user.Password = webservice.EncryptValue("password");

        WebServiceResult result = webservice.AttorneysGet(user);
    }

我认为我在界面上走在正确的轨道上,但我不确定如何传入一个类,然后它就像一个泛型一样。

这是我到目前为止所拥有的。

这样称呼

TestTOSomething<WebServiceAWI, WebServicesTO.ServiceReferenceARM.User>(new ServiceReferenceARM.User(), url);

然后像这样实施它,但我知道这是错误的。

    public void TestTOSomething<T, K>(K newUser, string url)
    {

        BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
        EndpointAddress endpoint = new EndpointAddress(url);

        var channelFactory = new ChannelFactory<T>(binding, endpoint);

        var webservice = channelFactory.CreateChannel();

        var user = newUser;
        user.UserName = webservice.EncryptValue("someone");
        user.Password = webservice.EncryptValue("password");

        WebServiceResult result = webservice.AttorneysGet(user);
    }

您可以为这些创建接口,然后在您的方法中引用它们。 如果没有使用newUser的泛型类型,则不需要包含它,只需直接在参数中使用它即可。

对于 WebServiceAWI,您需要使用where关键字定义该类型。

public void TestTOSomething<T>(IUser newUser, string url) where T : IWebServiceAWI

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM