快速业务通道

Asp.net 3.5控件和组件开发技术系列—从零开始开发服务器控件(下)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
is);
}

该语句主要完成把默认从WebControl继承来的一些样式属性赋值给主控件(在第7章讲控件样式 时还会专门分析ControlStyle对象),这些属性如图3-3所示。

图3-3 从WebControl继承来的默认样式属性

从图3-3中可以看出,这么多属性如果都要我们在Render方法中自己实现是比较麻烦的。

好了,上面说了在基类中有这么多好的可重用的方法,但我们禁用了base.Render方法,那应该 如何实现重用基类方法呢?实现起来也非常简单,直接在 Render方法中调用相关的基方法即可, 比如,如果想使用我们重载的TagKey作为主控件的HTML标记,则可以用如下调用方式:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
protected override void Render(HtmlTextWriter writer)
{
   base.RenderBeginTag(writer);
   writer.Write(Text); //自己的逻辑 
   base.RenderEndTag();
}

另外,如果不想使用基类的TagKey功能,仅希望把基类中继承的默认属性让系统自动追加到主 控件,作为主控件的属性,则可以用如下调用方式:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>
protected override void Render(HtmlTextWriter writer)
{
   base.AddAttributesToRender(writer);
   //如果只需要设置继承基类的样式属性,还可以用下面这句代替上面这句.
   //ControlStyle为一个Style类型,控件的BackColor属性等就是操作的ControlStyle对象
   //this.ControlStyle.AddAttributesToRender(writer);

   Table t = new Table();
   t.RenderControl(writer);
}

另外,以上这些代码功能不仅可以在Render方法中实现,还可以在我们想要的其他方法中实现 。前提是要非常了解基类方法中做了什么事情。

3.8.11 条件编译&条件属性

在实际开发中,经常需要根据不同运行环境下生成相应的机器代码。最愚蠢的办法是根据不同 的环境注释掉相应的语句,或者取消对需要的语句的注释,这样每换一次环境就必须修改代码。为 了解决这个问题,.NET Framework提供了一些支持:条件编译和条件属性。

1.#if/#else/#endif 条件编译

条件编译语句关键字为:#if#else,#endif。下面直接通过一个例子说明其用法:

#if NET35 || NET20
   using System.Web.UI.WebControls.WebParts;
#else
   //如果是NET10时,不编译任何代码
#endif

以上代码意思是如果.NET Framework至少是2.0以上版本,才会打开WebParts命名空间,因为在 .NET Framework 1.0还不支持WebParts控件。在条件编译代码语句中的符号&&(并且)和 ||(或者)跟普通C#代码语句中的&&和||符号含义相同。再强调一下,以上的条件编译符 号的作用是指在编译时是否会编译语句中的语句,而不是运行时。

上面的条件符号NET35和NET20是我们自己定义的一些字符串,注意在命名时不要随便定义无意 义的条件符号。那么编译系统怎么肯定会了解我们定义的这些 NET35,NET20条件符号呢?下面就 说明条件符号是怎么通知编译器的,右击控件库项目,选择"属性"命令,会打开项目属性配置窗口 ,选择左边的"生成"选项卡,会看到在"常规"下面有一项就是让我们设置条件编译符号的,如图3 -4所示。

图3-4 设置条件编译符号

如果您使用的是VS 2008就设置NET35;如果使用的是VS 2005,就设置NET20即可,并且此项设 置支持使用分号隔开,能写多个符号。还要注意对于系统自己使用的一些关键字如DEBUG等,就不 能使用了(即使设置了,系统也不会

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号