gpt4 book ai didi

c# - 这个委托(delegate)的使用是好是坏?

转载 作者:行者123 更新时间:2023-11-30 21:23:45 25 4
gpt4 key购买 nike

之所以问这个问题,是因为我之前没有代理最佳实践方面的经验

我有一个 html 格式的无序列表,其结构在我的整个站点中都是相同的,但列表的内容可能不同。

例子:
对象A列表

<ul>
<li>
<ul>
<li>A.someMember1</li>
<li>A.someMember2</li>
<li>A.someMember3</li>
</ul>
</li>
</ul>

对象B的列表

<ul>
<li>
<ul>
<li>B.someMember1</li>
<li>B.someMember2</li>
<li>B.someMember3</li>
<li>B.someMember4</li>
</ul>
</li>
</ul>

我创建了两个委托(delegate):

protected delegate void RenderHtmlMethod(HtmlTextWriter writer);
protected delegate void RenderHtmlMethodWithObjects(HtmlTextWriter writer, object obj);

和下面的方法

    private void RenderList(HtmlTextWriter writer, string title, RenderHtmlMethod headingDelegate,
RenderHtmlMethodWithObjects itemsDelegate, object objToRender)
{

writer.RenderBeginTag(HtmlTextWriterTag.Fieldset);

writer.RenderBeginTag(HtmlTextWriterTag.Legend);
writer.HtmlEncode(title);
writer.RenderEndTag();//end Legend

writer.AddAttribute(HtmlTextWriterAttribute.Class, "resultList");
writer.RenderBeginTag(HtmlTextWriterTag.Ul);
{
headingDelegate(writer);

itemsDelegate(writer, objToRender);
}
writer.RenderEndTag();//ul

writer.RenderEndTag(); //fieldset

}

这样,我就可以制作呈现标题的方法(只是另一个带有嵌入式 ul 的 li),然后为每个对象列表呈现必要的列表项。

我无法重新定义我的类来实现任何接口(interface),但是,我可以为这些类创建一个包装器并在那里实现渲染方法。你怎么看这件事?

我的结构有意义吗?还是我疯了?

最佳答案

我想这不是一个糟糕的决定。但是,我认为更好的方法是创建用于生成列表的特殊接口(interface)(或抽象类)。

public abstract class ListRenderer
{
public abstract IEnumerable Items {get;}
public abstract String GenerateHeaderText();
public String GenerateItemText(objectItem);
public abstract void RenderList(TextWriter writer);
}

然后您只需围绕您的具体项目创建包装器并将此对象传递给您的生成器方法。如果您的列表是以通用方式构建的,则可以在 ListRenderer 中实现所有逻辑,然后仅覆盖 GenerateHeaderText 和 GenerateItemText

关于c# - 这个委托(delegate)的使用是好是坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1572687/

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