【发布时间】:2020-10-14 18:04:06
【问题描述】:
我试图通过将列表“合并”到一个新类中来使其对用户更加友好,但是从该新类访问列表的特定功能和属性给我带来了麻烦。
这是一个例子:
public class Words : List<Word>
{
public uint BytesPerWord { get; protected set; }
public Word this[int index] => this.ElementAt(index);
/* public new Words GetRange(int index, int count)
{
var a = this.GetRange(index, count);
return a;
}*/
public Words(uint bytesPerWord) : base()
{
BytesPerWord = bytesPerWord;
}
}
现在,我尝试从其他地方将 someOtherWords 的“Words”类型的一部分提取到 myWords 中:
Words myWords = someOtherWords.GetRange((int)X, (int)Y);
这里有几个问题:
- GetRange 无法访问。因此,我尝试创建它的新版本(上面已注释掉),但是“this.GetRange()”会创建 stackOverflow 异常。
- “Word this[int index]”也抱怨隐藏的继承成员 - 但我猜这与之前的问题有关
非常感谢任何有关如何解决此问题的建议。
请注意,我也尝试用 Collection 替换 List,因为我已经阅读过我不应该从列表中派生,但这没有任何区别。
【问题讨论】:
-
为什么要继承
List<T>,重新定义GetRange?这是公共方法 -
@PavelAnikhouski,Words 应该更加用户友好。在我的代码库中引用单词比总是键入 List
= new List () 更容易。我不必重新定义GetRange,我只想使用它,但它在我的示例中不起作用。
标签: c# list inheritance collections