gpt4 book ai didi

C# - 复杂变量赋值

转载 作者:行者123 更新时间:2023-11-30 21:13:44 24 4
gpt4 key购买 nike

我有一个类(class)Row .这个类应该有一个内容属性。目前内容的类型是:List<IRowContent>

(IRowContent是一个接口(interface))

其他类ColumnTextContent , ImageContent实现接口(interface) IRowContent .

我现在可以将一些列添加到列表或真正的“内容”(文本或图像)。

但您也可以添加列和文本/图像。但是,如果一行包含文本/图像,则不应包含其他项目。

我如何设计我的类结构来支持这一点?

编辑:一些附加信息:我想构建一个具有“流畅界面”的布局 http://en.wikipedia.org/wiki/Fluent_interface

我的想法是防止VisualStudio的intellisense误用。

这是我的类(class):布局有一个列列表。

class Layout
{
//Attributes
public Color Background { get; set; }
public List<Column> Columns { get; set; }
public uint Margin { get; set; }

public Layout AddColumn(Column c)
{
return null;
}

public Layout SetColumnList(List<Column> c)
{
return null;
}
}

列有一个内容列表(IColumnContent)。该列本身来自 IRowContent。

class Column : IRowContent
{
public List<IColumnContent> Content { get; private set; }

public Column AddToContent(IColumnContent obj)
{
return null;
}

public Column SetContent(List<IColumnContent> objs)
{
return null;
}
}

对于带有 IRowContent 的行也是如此:

   class Row : IColumnContent
{
public List<IRowContent> Content { get; private set; }

//...
}

ImageContent 和 TextContent 实现了这两个接口(interface):

class TextContent : IRowContent, IColumnContent

class ImageContent : IRowContent, IColumnContent

最佳答案

如果你声明接口(interface)

interface IRowContent 
{
bool SupportsOtherChildren{ get; }
...
}

class ImageContent : IRowContent
{
public bool SupportsOtherChildren
{
get { return false; }
}
}

class Column : IRowContent
{
public bool SupportsOtherChildren
{
get { return true; }
}
}

您可以覆盖集合的插入和删除方法以支持此行为:

 class RowContentCollection : Collection<IRowContent>
{
bool containsSingleItem = false;
protected override void InsertItem(int index, IRowContent item)
{
if (containsSingleItem)
throw new InvalidOperationException("Collection contains an item that doesnt allow other items.");

containsSingleItem = !item.SupportsOtherChildren;

base.InsertItem(index, item);
}

protected override void RemoveItem(int index)
{
if (!this[index].SupportsOtherChildren)
containsSingleItem = false;

base.RemoveItem(index);
}
}

关于C# - 复杂变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6694151/

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