我能否实现一个接口并在返回时将其作为字段
本文关键字:返回 字段 接口 实现 一个 | 更新日期: 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();
}
}