我对 C# 还很陌生,所以如果这是一个愚蠢的问题,请原谅我。我遇到了一个错误,但我不知道如何解决它。我正在使用 Visual Studio 2010。我已经实施了社区成员的几个修复,但问题似乎不断出现。
它从这个代码行开始
public class GClass1 : KeyedCollection<string, GClass2>
我给了我错误
'GClass1' does not implement inherited abstract member 'System.Collections.ObjectModel.KeyedCollection<string,GClass2>.GetKeyForItem(GClass2)'
从我读过的内容来看,这可以通过在继承类中实现抽象成员来解决,就像这样
public class GClass1 : KeyedCollection<string, GClass2>
{
public override TKey GetKeyForItem(TItem item);
protected override void InsertItem(int index, TItem item)
{
TKey keyForItem = this.GetKeyForItem(item);
if (keyForItem != null)
{
this.AddKey(keyForItem, item);
}
base.InsertItem(index, item);
}
然而,这给了我错误,说“找不到类型或命名空间名称 TKey/TItem 找不到。” 所以我替换了占位符类型。
目前代码是
public class GClass1 : KeyedCollection<string, GClass2>
{
public override string GetKeyForItem(GClass2 item);
protected override void InsertItem(int index, GClass2 item)
{
string keyForItem = this.GetKeyForItem(item);
if (keyForItem != null)
{
this.AddKey(keyForItem, item);
}
base.InsertItem(index, item);
}
我完全忘记了 GetKeyForItem 是受保护的。新错误告诉我在覆盖 System.Collections.ObjectModel.KeyedCollection.GetKeyForItem(GClass2) 时无法更改访问修饰符。
我也收到一个奇怪的错误,说“GClass1.GetKeyForItem(GClass2)”必须声明一个主体,因为它没有被标记为抽象、外部或部分的
访问修饰符问题是否有任何解决方法,有人可以解释“声明一个主体,因为它没有被标记”错误吗?
谢谢!