我能否实现一个接口并在返回时将其作为字段

本文关键字:返回 字段 接口 实现 一个 | 更新日期: 2023-09-27 18:36:28

我知道这听起来微不足道,但是当我将 A 变量传递给需要 IMyIntercace 的函数时,是否可以以某种方式返回 b 字段?然后我不必在类 A 中实现 Hello() 函数,而是返回 b 作为 IMyInterface。

interface IMyInterface
{
    void Hello();
}
class A : IMyInterface
{
    B b = new B();
}
class B : IMyInterface
{
    public void Hello()
    {
        Console.WriteLine("Hello");
    }
}
class Program
{
    static void foo(IMyInterface myInterface)
    {
        myInterface.Hello();
    }
    static void Main(string[] args)
    {
        A someVariable = new A();
        foo(someVariable);
    }
}

我想这不可能做到,但是有什么设计模式或技巧可以做到吗?

编辑

我不想派生 A 的原因是,也许我想这样做

class A : IMyInterface
{
    B b = new B();
    B b2 = new B();
    IMyInterface bPointer;
}

然后我可以根据某些情况指向其中一个 b

我能否实现一个接口并在返回时将其作为字段

你可以从B继承A。A 将继续实现该接口,并且您可以覆盖将来需要更改的每个函数。

interface IMyInterface
{
    void Hello();
}
class A : B
{
}
class B : IMyInterface
{
    public void Hello()
    {
        Console.WriteLine("Hello");
    }
}

No.要么A实现IMyInterface,在这种情况下,您不需要做任何事情,要么不需要,在这种情况下,没有办法自动将任何感兴趣的各方"重定向"到b成员。

您可以向外界公开b(最好使其成为属性),以便他们可以根据需要引用它,也可以A实现IMyInterface并手动将所有调用转发到b,如下所示:

class A : IMyInterface
{
    B b = new B();
    public void Hello()
    {
        b.Hello();
    }
}

只需将A.b设为公共(或内部),然后调用foo(someVariable.b)

你想要的是接口委派,不幸的是,语言中没有内置任何东西来帮助你。

基本上,A类必须实现接口。

当然,它可以做到这一点的一种方法是从B派生:

class A : B
{
}

但是,如果您不想这样做,则需要委派。你要做的是自己实现委托,这样你就可以将实际实现的责任委托给B类,你不会从编译器那里得到任何帮助来解决这个问题。

class A : IMyInterface
{
    B b = new B();
    public void Hello()
    {
        b.Hello();
    }
}