c# - 覆盖 Asp.net WebControls、UserControls、Controls 上的 Render 方法时的最佳实践

标签 c# asp.net coding-style overriding web-controls

当创建一个自定义的WebControlUserControlControl并且需要覆盖各种Render方法时,主要有2种方法完成这个:

快速而肮脏的:

public override void RenderControl(HtmlTextWriter writer)
{
    writer.Write("<div class=\"{0}\"><a href={1}>{2}</a>", CssClass, "/someurl.aspx", LocalizedStrings.EditLinkText);
    base.RenderControl(writer);
    writer.Write("</div>");
}

又长又干净:

public override void RenderControl(HtmlTextWriter writer)
{
    writer.WriteBeginTag(HtmlTextWriterTag.Div.ToString());
    writer.WriteAttribute(HtmlTextWriterAttribute.Class.ToString(), CssClass);
    writer.Write(HtmlTextWriter.TagRightChar);
    var link = new HtmlAnchor();
    link.HRef = "/someurl.aspx";
    link.Title = LocalizedStrings.EditLinkTitle;
    link.InnerText = LocalizedStrings.EditLinkText; ;
    link.Attributes.Add(HtmlTextWriterAttribute.Class.ToString(), "someclass");
    link.RenderControl(writer);
    base.RenderControl(writer);
    writer.WriteEndTag(HtmlTextWriterTag.Div.ToString());
}

我想知道第二种方法是否值得。

最佳答案

作为 Clean Code 的粉丝,我会选择第一种方法。即使第二种方法更“照章办事”,它也缺乏第一种方法的清晰度。

源代码应该始终以清晰的方式传达意图(好吧,它也应该有效),所以在证明无效之前,我会采用第一种方法。

关于c# - 覆盖 Asp.net WebControls、UserControls、Controls 上的 Render 方法时的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14891796/

相关文章:

c# - 字符串替换方法的优化

c# - ASP.NET 中用于 Page_Load 的自定义属性

android - 在样式定义中使用@string 资源

c# - 列表<对象> 与列表<动态>

c# - 注释掉整个文件

c# - 什么时候使用 "this"关键字?

c# - Xamarin Forms and Material design,如何改变提示颜色

c# - 在单独的类中订阅事件

c# - .NET Core Entity Framework - 为类库中的 Context 添加迁移

asp.net - IIS 未运行 ASP.NET MVC 应用程序