如何解决:转换运算符无法从接口类型转换
本文关键字:运算符 类型转换 接口 转换 何解决 解决 | 更新日期: 2023-09-27 18:28:46
我已经包装了INetFwRule成员,我把属性放在一个名为FirewallRule
的自定义类型中,为了在执行从INetFwRule
到FirewallRule
的转换时节省代码其他部分的时间,我试着编写这个隐式转换器:
C#:
public static explicit operator FirewallRule(INetFwRule rule) {
return new FirewallRule {
Action = (FirewallRuleAction)rule.Action,
ApplicationName = rule.ApplicationName,
Description = rule.Description,
// etc...
};
}
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
然而,我在rule
参数中得到了这个错误:
转换操作员无法从接口类型转换
有一种方法可以解决这个问题,即能够编写CType
?。
编译器禁止定义将接口作为参数的转换运算符,因为它认为这种转换已经定义(即内置的强制转换功能)。
您需要使用一些其他语法来启动INetFwRule
到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...
};
}
}
而不是写
FirewallRule newRule = (FirewallRule)someRule;
API的客户会编写
FirewallRule newRule = someRule.ToFirewallRule();