首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将对象强制转换为非显式实现的接口

将对象强制转换为非显式实现的接口
EN

Stack Overflow用户
提问于 2017-07-08 05:44:23
回答 1查看 48关注 0票数 1

不知何故,可以将对象强制转换为它不直接继承的接口?在下面的示例代码中,有没有办法将所有实例转换为单个实例?

代码语言:javascript
复制
public interface  IA
{
    void A();
}

public interface IB
{
    void B();
}

public interface IC : IA, IB
{
}

public class All : IA, IB
{
    public void A()
    {
        Console.Out.WriteLine("ALL A");
    }

    public void B()
    {
        Console.Out.WriteLine("ALL B");
    }
}

public class Single : IC
{
    public void A()
    {
        Console.Out.WriteLine("SINGLE A");
    }

    public void B()
    {
        Console.Out.WriteLine("SINGLE B");
    }
}

class Program
{
    static void Main()
    {
        All all = new All();
        Single single = (Single)(all as IC); // Always null
        single?.A();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-08 05:50:32

您将需要使用the Adapter Pattern

代码语言:javascript
复制
class AllIC : IC {
    private readonly All all;
    public AllIC(All all) {
        if( all == null ) throw new ArgumentNullException(nameof(all));
        this.all = all;
    }

    public void A() => this.all.A();
    public void B() => this.all.B();
}

static void Main()
{
    All all = new All();
    IC ic = new AllIC( all ); // Observe that `ic` is typed as interface `IC` instead of the concrete type `Single`.
    ic.A();
}

请注意,与interfaces不同,您不能将一个具体类型强制转换为另一个具体类型(在本例中,强制转换为Single),必须将局部变量类型从具体类型(Single)更改为接口(IC)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44980069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档