我知道这听起来微不足道,但是当我将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;
}
然后我可以根据某些情况指出其中一个
答案 0 :(得分:0)
你可以从B继承A. A将继续实现界面,您可以覆盖将来需要更改的所有功能。
interface IMyInterface
{
void Hello();
}
class A : B
{
}
class B : IMyInterface
{
public void Hello()
{
Console.WriteLine("Hello");
}
}
答案 1 :(得分:0)
没有。 A
实现IMyInterface
,在这种情况下您不需要执行任何操作,或者不执行任何操作,在这种情况下,无法将任何感兴趣的各方自动“重定向”到{{1}成员。
您可以向外界公开b
(并最好将其设为属性),以便他们可以根据需要引用它,或者您可以b
实施A
和手动将所有来电转发至IMyInterface
,如下所示:
b
答案 2 :(得分:0)
只需将A.b
公开(或内部),然后拨打foo(someVariable.b)
。
答案 3 :(得分:0)
您希望拥有的是界面委派,遗憾的是,语言中没有任何内容可以帮助您实现这一目标。
基本上,A
类必须实现接口。
它可以做到的一种方式当然是从B
得出:
class A : B
{
}
但如果您不想这样做,那么您需要委托。你需要做的是自己实现委托,以便你可以将实际实现的责任委托给B
类,你不会得到编译器的任何帮助来解决这个问题。
class A : IMyInterface
{
B b = new B();
public void Hello()
{
b.Hello();
}
}