- 節
- グループ
- 項目
- 属性
- 属性
- 項目
- グループ
- 項目
- 属性
- 属性
- 項目
- グループ
節
[...]
私は、このように、このアーキテクチャをインスタンス化しようとしている:
var sections = new List<ISection>
{
new Section("Section Header", new List<Group<IItem>>
{
new SpecificGroupType1(token, "GroupName")
}
};
SpecificGroupType1は、適切なIItemの新しいリストをスピンアップタイプ。
でも、私は次のエラーを取得しています:
Argument SpecificGroupType1 is not assignable to parameter type Group<IItem>
私も、なぜ非常にわからないんだけど、SpecificGroupType1グループから継承するため。
完全なアーキテクチャは、この(IAttributeのものにも関与して取得する前に、私はに実行している問題が発生したので、私は、IAttributeのものを省略)のようになります。
Section.cs
public interface ISection { // Stuff }
public class Section : ISection
{
public Section(string sectionName, IList<Group<IItem>> groups)
{
Name = sectionName;
Groups = groups;
}
}
Group.cs
public interface IGroup { // Stuff }
public abstract class Group<T> : IGroup where T : IItem
{
protected Group(JToken token, string groupName)
{
Name = groupName;
Items = new List<IItem>();
foreach (var itemToken in Token.Children())
{
Items.Add((Item)Activator.CreateInstance(typeof(T), itemToken);
}
}
public string Name { get; internal set; }
public JToken Token { get; internal set; }
protected IList<IItem> Items { get; set; }
}
SpecificGroupType1.cs
public class SpecificGroupType1 : Group<SpecificItemType1>
{
public SpecificGroupType1(JToken token, string groupName) : base(token, groupName) {}
// Stuff
}
Item.cs
public interface IItem { // Stuff }
public abstract class Item : IItem
{
protected ConfigurationItem(JToken token)
{
Attributes = new List<IAttribute>();
Token = token;
}
public IList<IAttribute> Attributes { get; set; }
public JToken Token { get; set; }
}
SpecificItemType1。CS
public class SpecificItemType1 : Item
{
public SpecificItemType1(JToken token) : base(token) {}
// Stuff
}
あなたのコードで表示されている問題の1つは、IGroupですが、IGroupの宣言には一般的なパラメータがありません。どこかに汎用的なインターフェース定義が追加されていない限り、コンパイルに失敗します。 –
recursive
おっと、それはタイプミスでした。実際には私のコードでIList>です。 –
jrsowles
SpecificItemType1の定義がありますか?それはItemから継承していますか? – Bill