Ele*_*ios 3 .net c# vb.net com interface
我包装了INetFwRule成员,将属性放入名为 的自定义类型中,并且为了在执行从到 的FirewallRule转换时节省代码其他部分的时间,我尝试编写此隐式转换器:INetFwRuleFirewallRule
C#:
public static explicit operator FirewallRule(INetFwRule rule) {
return new FirewallRule {
Action = (FirewallRuleAction)rule.Action,
ApplicationName = rule.ApplicationName,
Description = rule.Description,
// etc...
};
}
Run Code Online (Sandbox Code Playgroud)
Vb.Net(原始):
Public Shared Narrowing Operator CType(ByVal rule As INetFwRule) As FirewallRule
Return New FirewallRule With {
.Action = DirectCast(rule.Action, FirewallRuleAction),
.ApplicationName = rule.ApplicationName,
.Description = rule.Description,
' etc ...
}
End Operator
Run Code Online (Sandbox Code Playgroud)
但是,我在参数中收到此错误rule:
转换运算符无法从接口类型进行转换
有一种方法可以解决这个问题,能够编写CType?.
编译器禁止您定义将接口作为参数的转换运算符,因为它认为此类转换已经定义(即内置的强制转换能力)。
您需要使用一些其他语法来启动INetFwRuleto的转换FirewallRule- 例如,扩展为INetFwRule:
public static class NetFwRuleExt {
public static FirewallRule ToFirewallRule(this INetFwRule rule) {
return new FirewallRule {
Action = (FirewallRuleAction)rule.Action,
ApplicationName = rule.ApplicationName,
Description = rule.Description,
// etc...
};
}
}
Run Code Online (Sandbox Code Playgroud)
而不是写作
FirewallRule newRule = (FirewallRule)someRule;
Run Code Online (Sandbox Code Playgroud)
你的 API 的客户端会写
FirewallRule newRule = someRule.ToFirewallRule();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
582 次 |
| 最近记录: |