C# 我可以实现一个接口并在返回它时将其作为字段吗?
我知道这听起来很简单,但当我将一个A变量传递给一个需要IMyIntercace的函数时,是否有可能返回b字段?然后我不必在类A中实现Hello()函数,而是返回b作为IMyInterfaceC# 我可以实现一个接口并在返回它时将其作为字段吗?,c#,design-patterns,interface,C#,Design Patterns,Interface,我知道这听起来很简单,但当我将一个A变量传递给一个需要IMyIntercace的函数时,是否有可能返回b字段?然后我不必在类A中实现Hello()函数,而是返回b作为IMyInterface interface IMyInterface { void Hello(); } class A : IMyInterface { B b = new B(); } class B : IMyInterface { public void Hello() {
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");
}
}
否。
A
实现IMyInterface
,在这种情况下,您不需要执行任何操作,或者它不需要执行任何操作,在这种情况下,无法自动将任何相关方“重定向”到b
成员
您可以将b
(最好将其作为属性)公开给外部世界,以便他们可以根据需要引用它,或者您可以使a
实现IMyInterface
并手动将所有调用转发给b
,如下所示:
class A : IMyInterface
{
B b = new B();
public void Hello()
{
b.Hello();
}
}
只需将
A.b
public(或internal),然后调用foo(someVariable.b)
您想要的是接口委派,不幸的是,该语言中没有内置任何东西可以帮助您实现这一点
基本上,A
类必须实现接口
它可以做到这一点的一种方法当然是从B
派生:
class A : B
{
}
但是如果你不想这样做,那么你需要授权。您需要做的是自己实现委托,这样您就可以将实际实现的责任委托给B
类,而不会从编译器那里得到任何帮助来解决这个问题
class A : IMyInterface
{
B b = new B();
public void Hello()
{
b.Hello();
}
}
你为什么有这样的需要?设计将取决于您想要实现什么?为什么不
class A:B
?不应建议将继承作为“机械”问题的解决方案。在域模型中,A扩展B是有意义的,或者是没有意义的。