c#:为另一个.net程序集中的内部类编写显式强制转换操作符



我正在处理一个第三方库密封的内部类型。我们称这种类型为VendorInternalTypeA。它被用于装配VendorLibraryA

我想在几个地方用一个不同的类型,我自己的类型来代替VendorInternalTypeA。这比您预期的要好,但是在第三方内部代码中也有一个问题:

// Example code to illustrate the problem: no actual ArrayLists are being used.
void SaveA(object maybeA) {
arrayList.Add(maybeA);
}
VendorInternalTypeA LoadA() {
return (VendorInternalTypeA) arrayList[0];
}

这意味着LoadA期待VendorInternalTypeA的实例,或者至少是它可以显式转换为VendorInternalTypeA的东西。一个子类在这里可以很好地工作——但是VendorInternalTypeA是密封的,所以我不能创建它的子类。

经过一番思考,我突然想到,如果我可以定义一个实现显式操作符的类对于VendorInternalTypeA, cast工作,我将能够通过我自己的类的实例,并让他们玩得很好!我非常兴奋,直到我想起VendorInternalTypeA也是一个内部类,所以我不能在代码中直接引用它。

所以,我的问题是:有没有一种方法可以解决这个问题,用反射、IL发射或其他稍微有点粗糙的方法?在另一个类的定义中引用这个内部类的方法?

(我有90%的可能性放弃这个项目,说它根本不可能完成——即使答案是"可以",我仍然可能会放弃这个项目。但这对我来说是一个非常有趣的问题。

不,没有。即使该类是公共的,并且您确实从类显式地转换为VendorInternalTypeA,所讨论的代码将类型为object的表达式强制转换为VendorInternalTypeA,而不是自定义类型的表达式,因此即使存在显式转换操作符也不会使用。

当要转换的表达式的编译时类型具有要转换为的类型的用户定义操作符时,在编译时绑定用户定义的转换操作符

最新更新