gpt4 book ai didi

c# - 包含创建实例的方法的接口(interface)

转载 作者:行者123 更新时间:2023-11-30 17:53:36 25 4
gpt4 key购买 nike

我需要一个模式:

我正在使用 C#。

假设有三个 Actor ;吉姆、帕特和莎莉。 Pat 的工作是创建一个接口(interface)作为 Jim 和 Sally 之间的契约。 Sally 的工作是创建一个实现该接口(interface)的类,而 Jim 的工作是编写一个使用 Sally 的对象的类。

Jim 不应该知道 Sally 的具体对象,只知道它实现了公共(public)接口(interface)。

Pat 需要在契约(Contract)中包含一种方法,让 Jim 创建 Sally 的具体对象的实例,但作为接口(interface)引用。

没有办法在接口(interface)或抽象类中包含静态方法定义,因此您不能这样做:

public interface IFoo
{
public static IFoo CreateIFoo();
}

Pat 如何编写合约来保证 Sally 会为 Jim 创建一个方法来创建她作为接口(interface)引用的具体对象?

最佳答案

如果可能,请求 Sally 的实例:

class Jim 
{
public Jim(Sally sally){ /* ... */ }
}

但是,如果 Jim 需要知道何时构建 Sally,您可以传入一个委托(delegate):

class Jim
{
private Func<Sally> _createSally.

public Jim(Func<Sally> createSally)
{
_createSally = createSally;
}

public void ConsumeSally()
{
Sally sally = _createSally();
/* ... */
}
}

最简单的用法:

var jim = new Jim( () => new Sally() );

您不需要一个类 (Pat) 来了解如何实例化 sally,除非它确实为您的代码增加了值(value)。无论哪种方式,您可能都不希望 Jim 知道 Pat,因此如果需要 Pat,这就是您想要的:

var jim = new Jim( () => Pat.GetSally() );

关于c# - 包含创建实例的方法的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17154394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com