gpt4 book ai didi

C#静态接口(interface)或抽象实现

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:53 26 4
gpt4 key购买 nike

我有一个程序需要能够与多个平台交互,即读/写文件、读/写数据库或读/写 Web 请求。平台接口(interface)是从配置中选择的,在应用程序运行时不会改变。我有一个读/写接口(interface)类,它由特定于平台的类继承,因此它是从程序的其余部分中抽象出来的。

我的问题是我的框架中有 10 个类需要使用这个接口(interface)。与其创建此类的多个实例,或将单个引用传递给每个类,我认为将接口(interface)设为静态是有意义的。不幸的是,我刚刚了解到接口(interface)不能有静态方法,静态方法不能调用非静态方法,静态方法不能是抽象的。

谁能告诉我另一种处理这种情况的方法?

编辑:感谢大家的意见,这里是我基于Patrick Hofman给出的例子的解决方案(谢谢!)

interface TheInterface
{
void read();
void write();
}


public class X : TheInterface
{
public void read() { //do something }
public void write() { //do something }
}

public class Y : TheInterface
{
public void read() { //do something }
public void write() { //do something }
}


public class FileAccessor
{
public static TheInterface accessor;

public static TheInterface Accessor
{
get
{
if(accessor) return accessor;
}
}
}

这可以被任何类调用为:

static void Main(string[] args)
{
switch (Config.interface)
{
case "X":
FileAccessor.accessor = new Lazy<X>();
case "Y":
FileAccessor.accessor = new Lazy<Y>();
default:
throw new Lazy<Exception>("Unknown interface: " + Config.interface);
}

FileAccessor.Accessor.read();
}

最佳答案

确实,接口(interface)或抽象类不能是static自己,但进一步实现可以。此外,您可以使用单例模式让您的生活更轻松,并允许继承等。

public class X : ISomeInterface
{
private X() { }

public static X instance;
public static X Instance
{
get
{
return instance ?? (instance = new X());
}
}
}

或者,使用 Lazy<T> :

public class X : ISomeInterface
{
private X() { }

public static Lazy<X> instanceLazy = new Lazy<X>(() => new X());
public static X Instance
{
get
{
return instance.Value;
}
}
}

关于C#静态接口(interface)或抽象实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29428688/

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