gpt4 book ai didi

c# - 抽象基类还是接口(interface)?两者都不对

转载 作者:太空狗 更新时间:2023-10-30 00:13:15 25 4
gpt4 key购买 nike

给定以下代码:

using System.Collections.Generic;
static class Program {
static void Main() {
bar Bar = new bar();
baz Baz = new baz();
System.Console.WriteLine(
"We have {0} bars, rejoice!", bar.Cache.Count);
}
}

public abstract class foo {
public static List<foo> Cache = new List<foo>();
}

public class bar : foo {
public bar() { Cache.Add(this); }
}
public class baz : foo {
public baz() { Cache.Add(this); }
}

您得到(有些符合预期的)输出“我们有 2 根柱子,高兴!”。

这太棒了,我们现在有两倍多的地方可以喝啤酒(显然),但我真正想要的是每个类(class)都有自己的缓存。我不想只在子类中实现这个缓存的原因是因为我的抽象类中也有一些方法需要能够对缓存进行操作(即迭代所有这些方法)。有没有办法做到这一点?我看过为 foo 使用接口(interface),但该接口(interface)不允许将静态成员定义为接口(interface)的一部分。

最佳答案

foo 的每个派生类都应定义获取缓存的方式/位置,因此每个类都可以(可能)拥有自己的缓存。 foo 中的方法可以在不知道实现的情况下引用 GetCache()。

public abstract class foo
{
public abstract ICache GetCache();

public void DoSomethingToCache()
{
ICache cache = this.GetCache();
cache.DoSomething();
}
}

public class bar : foo
{
public static ICache BarCache = new FooCache();

public override ICache GetCache()
{
return bar.BarCache;
}
}

public class FooCache : ICache { }

关于c# - 抽象基类还是接口(interface)?两者都不对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/616743/

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