use*_*885 1 c# asp.net community-server
之前我问了一个关于接口的问题并得到了一些很好的回答.我真的很兴奋开始开发真正灵活的代码.
我现在有一个关于覆盖虚方法的问题.
我目前正在使用社区服务器SDK.其中一个控件是"标签"面包屑.所以它会在相关对象上列出'标签'.
<CSBlog:TagBreadCrumb />
Run Code Online (Sandbox Code Playgroud)
我正在使用标签来允许管理员定位特定的内容以使内容出现在布局中,但这些标签与最终用户无关.例如,'Home_Main'标签用于定位主页上的主面板,但我不希望用户看到它.
由于我有社区服务器的SDK,我找到了控制器,它呈现了'标签列表'并对其做了我想要的修改 - 但我的理解是,由于许多原因修改核心并不好.
所以我想要做的是创建我自己的控件,它基本上与基本控件几乎100%相同,但覆盖一个方法.
这是方法:
public virtual string FormatTags(string[] tagList)
Run Code Online (Sandbox Code Playgroud)
里面有代码来格式化标签,我想编写自己的代码来完成所有相同的工作,除了检查配置文件中的"标签"要排除.
所以我的理解是我创建了我的控件,从基本控件派生 - 我可以编写自己的FormatTags()方法 - 这是正确的吗?
我只需要改变它的一个方面,但这是否意味着我必须从基类复制该方法的原始代码 - 并在那里改变我需要的东西?它只是从一个地方感觉不正确的copyign代码,但我不知道在不改变基类中的代码的情况下扩展方法的另一种方法.
谢谢你的任何建议.
在您的情况下(您希望禁止在面包屑中打印某些标记),您将在调用基本方法之前去除所有特殊标记.
所以你的代码看起来像:
public override string FormatTags(string[] tagList)
{
// strip special tags
string[] newTagList = stripTags(tagList);
return base.FormatTags(newTagList);
}
Run Code Online (Sandbox Code Playgroud)
这样您就不需要了解基类如何格式化输出字符串.
如果您想要修改输出字符串的格式,则不会对基本方法进行任何调用(因为该方法可能会在将来的版本中更改它的格式,您不希望受其影响).
| 归档时间: |
|
| 查看次数: |
1387 次 |
| 最近记录: |