假设您定义了一些任意接口:
public interface IInterface {
void SomeMethod();
}
假设有一些类恰好有一个匹配的公共接口,即使它们没有“实现IInterface
". IE:
public class SomeClass {
public void SomeMethod() {
// some code
}
}
有没有办法获得IInterface
参考一个SomeClass
实例? IE:
SomeClass myInstance = new SomeClass();
IInterface myInterfaceReference = (IInterface)myInstance;
不,没有办法做到这一点。如果类型没有实现接口,则无法转换为它。实现与您想要的行为类似的行为的最佳方法是创建一个包装类型,它提供以下实现IInterface
for SomeClass
.
public static class Extensions {
private sealed class SomeClassWrapper : IInterface {
private readonly SomeClass _someClass;
internal SomeClassWrapper(SomeClass someClass) {
_someClass = someClass;
}
public void SomeMethod() {
_someClass.SomeMethod();
}
}
public static IInterface AsIInterface(this SomeClass someClass) {
return new SomeClassWrapper(someClass);
}
}
然后你可以拨打以下电话
SomeClass myInstance = new SomeClass();
IInterface myInterface = myInstance.AsIInterface();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)