gpt4 book ai didi

c# - C# 中的私有(private)继承?

转载 作者:太空狗 更新时间:2023-10-29 18:11:22 25 4
gpt4 key购买 nike

我是 C# 的新手,想知道 C# 中是否有私有(private)继承之类的东西(就像在 C++ 中一样)?

我的问题如下:我想通过以下更改实现一个队列(将其命名为 SpecialQueue):

  1. 队列中可以存储的项目数量有上限。
  2. 如果队列已满而您插入一个新项目,一个项目将自动从队列中弹出(队列中的第一个项目),新项目将被插入到队列末尾。
  3. queue 提供的一些方法(例如 peek())不应该暴露给 SpecialQueue 的用户。

在 C++ 中,我会将队列中的 ihnerit 私有(private)化,只公开我想要的方法,并根据我的意愿更改其他方法。但不幸的是,队列中的所有方法都没有“Override”修饰符,我不知道如何在 C# 中实现它。

有什么帮助吗?

问候,丹

最佳答案

使用组合:包括一个通常的 Queue作为 SpecialQueue 中的一个字段。私有(private)继承实际上与组合非常相似。

参见 http://www.parashift.com/c++-faq-lite/private-inheritance.html#faq-24.3供讨论。


实现可能是这样的:

public class SpecialQueue<T>
{
private int capacity;
private Queue<T> storage;

public SpecialQueue(int capacity)
{
this.capacity = capacity;
storage = new Queue<T>();
// if (capacity <= 0) throw something
}

public void Push(T value)
{
if (storage.Count == capacity)
storage.Dequeue();
storage.Enqueue(value);
}

public T Pop()
{
if (storage.Count == 0)
throw new SomeException("Queue is empty");
return storage.Dequeue();
}

public int Count
{
get { return storage.Count; }
}
}

如果你想让 SpecialQueue 支持它们,你需要添加更多的函数/接口(interface)。然而,我不建议实现 IEnumerable,因为这将允许 Peek(您想要禁止)。

关于c# - C# 中的私有(private)继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4520958/

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