我看到这可以用来从Web服务中获取,但我不确定如何调用它。
public static class IDSSExtensions
{
public static T SetCredentials<T>(this T aServiceType)
{
dynamic theDynamic = aServiceType;
theDynamic.UserName = "Username";
theDynamic.Password = "Password";
return aServiceType = theDynamic;
}
}
这样的事情,我假设:IDSSExtensions.SetCredentials<>;
但是,需要在<
和>
之间进行某些操作,但是什么呢? aServiceType
?
我有一个WebReference,其命名空间为:ServiceMembersIDSS,但如果我把它放在那里,那将无法正常工作并出错。那里有什么?
例如,可以像这样使用:
而不是:
private AuthorizeHeader IDSSCredentials()
{
ServiceMemberIDSS.AuthorizeHeader _authHeader = new ServiceMemberIDSS.AuthorizeHeader();
_authHeader.UserName = "Username";
_authHeader.Password = "Password";
return _authHeader;
}
我可以这样做:
private AuthorizeHeader IDSSCredentials()
{
ServiceMemberIDSS.AuthorizeHeader _authHeader = new ServiceMemberIDSS.AuthorizeHeader();
_authHeader.SetCredentials();
return _authHeader;
}
这是对的吗?
答案 0 :(得分:2)
这是一个非常奇怪的代码块,但是这里有:
这里对任何类型的对象都是通用的。静态类和方法中的“this”语法使其成为扩展方法。由于这是T的扩展方法,没有约束,包括此文件会将此方法添加到所有对象中。因此,您可以在任何对象上从技术上调用此方法:
Object foo = new Object();
foo.SetCredentials();
然而,动态强制转换假定您的对象具有两个属性UserName和Password。如果对象没有这些属性,那么它将抛出异常。该方法应该采用具有UserName和Password属性的接口,而不是T.当然,只需创建自己的具有UserName和Password属性的对象,就可以无异常地调用该方法。
public class MyObject
{
public String UserName { get; set; }
public String Password { get; set; }
}
MyObject myObject = new MyObject();
myObject.SetCredentials();