转换为未显式实现的接口?

2024-04-01

假设您定义了一些任意接口:

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(使用前将#替换为@)

转换为未显式实现的接口? 的相关文章

随机推荐