100165366.htm

来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 172 行 · 第 1/2 页

HTM
172
字号


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
	
        10.1.2  定制特性示例WhatsNewAttributes
</title></head>
<body>
    <div class="area">

        

        <div class="col1">
            <div class="lineBlue">
            </div>
            <!-- title -->
            <div class="arcTitle">
                <h1>
                    <a href="../16">
                        C#高级编程(第3版)【全文连载】
                    </a>
                </h1>
                <div style="text-align: center; font-size: 15px">
                    <a href="100165366.htm">
                        10.1.2  定制特性示例WhatsNewAttributes
                    </a>
                </div>
                <div style="text-align: center; font-size: 15px">
                    <a class="url" href="../../default.htm">http://book.csdn.net/</a>
                    2006-10-13 14:41:00
                </div>
                <div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
                    <div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
                        图书导读
                    </div>
                    <div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
                        <!--导读-->
                        <h1 id="divCurrentNode" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165366.htm'><font color='red'>10.1.2  定制特性示例WhatsNewAttributes</font></a></h1>
                        <div id="divRelateNode" style="padding-left: 2px">
                        <div style='float:left;width:49%'>·<a href='100165363.htm'>9.2  小结</a></div><div style='float:right;width:49%'>·<a href='100165364.htm'>10.1  定制特性</a></div><div style='float:left;width:49%'>·<a href='100165365.htm'>10.1.1  编写定制特性</a></div><div style='float:right;width:49%'>·<a href='100165367.htm'>10.2  反射</a></div><div style='float:left;width:49%'>·<a href='100165368.htm'>10.2.1  System.Type类</a></div><div style='float:right;width:49%'>·<a href='100165369.htm'>10.2.2  TypeView示例</a></div></div>
                    </div>
                </div>
                </div>
            <!-- main -->
            <div id="main">
                <div id="text"> <link href="css.css" rel="stylesheet" type="text/css" /><h3 style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 0cm; MARGIN-RIGHT: 0cm; FTEL: 8.15pt"><a ftel="_Toc507815078"><span lang="EN-US">10.1.2 &nbsp;</span></a><span style="FONT-FAMILY: 黑体">定制特性示例</span><span lang="EN-US">WhatsNewAttributes</span><span lang="EN-US"> </span></h3>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">本节开始编写前面描述过的示例</span><span lang="EN-US">WhatsNewAttributes</span><span style="FONT-FAMILY: 宋体">,该示例提供了一个特性,表示最后一次修改的程序元素。这个示例比前面所有的示例都复杂,因为它包含</span><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体">个不同的程序集:</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US">WhatsNewAttributes</span><span style="FONT-FAMILY: 宋体">程序集,它包含特性的定义。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US">VectorStruct</span><span style="FONT-FAMILY: 宋体">程序集,包含所应用的特性的代码</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">这类似于前几章使用的</span><span lang="EN-US">Vector</span><span style="FONT-FAMILY: 宋体">示例</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US">LookUpWhatsNew</span><span style="FONT-FAMILY: 宋体">程序集包含显示已改变的数据项信息的项目。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">到目前为止,其中只有</span><span lang="EN-US">LookUpWhatsNew</span><span style="FONT-FAMILY: 宋体">是所使用的一个控制台应用程序,其余两个程序集都是库文件,它们都包含类的定义,但都没有程序的入口。对于</span><span lang="EN-US">VectorStruct</span><span style="FONT-FAMILY: 宋体">程序集,我们是使用了</span><span lang="EN-US">VectorAsCollection</span><span style="FONT-FAMILY: 宋体">示例,但删除了入口和测试代码类,只剩下</span><span lang="EN-US">Vector</span><span style="FONT-FAMILY: 宋体">类。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">在命令行上编译,以此管理</span><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体">个相关的程序集要求较高的技巧,所以我们分别给出编译这</span><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体">个源文件的命令。您也可以编辑代码示例,</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">可以从</span><span lang="EN-US">Wrox Press</span><span style="FONT-FAMILY: 宋体">网站上下载</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,组合为一个</span><span lang="EN-US">Visual Studio .NET</span><span style="FONT-FAMILY: 宋体">解决方案,详见第</span><span lang="EN-US">12</span><span style="FONT-FAMILY: 宋体">章。下载的文件包含所需的</span><span lang="EN-US">Visual Studio .NET</span><span style="FONT-FAMILY: 宋体">解决方案文件。</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">1. WhatsNewAttributes </span><span style="FONT-FAMILY: 黑体">库程序集</span></h4>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">首先从核心的</span><span lang="EN-US">WhatsNewAttributes</span><span style="FONT-FAMILY: 宋体">程序集开始。其源代码包含在文件</span><span lang="EN-US">WhatsNew Attributes.cs</span><span style="FONT-FAMILY: 宋体">中,编译为库的语法非常简单:在命令行上,给编译器提供标记</span><span lang="EN-US">target:library</span><span style="FONT-FAMILY: 宋体">即可。要编译</span><span lang="EN-US">WhatsNewAttributes</span><span style="FONT-FAMILY: 宋体">,键入:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><strong><span lang="EN-US">csc /target:library WhatsNewAttributes.cs</span></strong></p>
<p class="MsoNormal"><span lang="EN-US">WhatsNewAttributes.cs</span><span style="FONT-FAMILY: 宋体">文件定义了两个特性类</span><span lang="EN-US">LastModifiedAttribute</span><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">SupportsWhatsNew Attribute</span><span style="FONT-FAMILY: 宋体">。</span><span lang="EN-US">LastModifiedAttribute</span><span style="FONT-FAMILY: 宋体">特性可以用于标记最后一次修改数据项的时间,它有两个必选参数</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">该参数传递给构造函数</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">;修改的日期和包含描述修改的字符串。它还有一个可选参数</span><span lang="EN-US">Issues (</span><span style="FONT-FAMILY: 宋体">表示存在一个公共属性</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,它可以描述该数据项的任何重要问题。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">在现实生活中,或许想把特性应用到任何对象上。为了使代码比较简单,这里仅允许将它应用于类和方法,并允许它多次应用到同一个项目上</span><span lang="EN-US">(AllowMultiple=true)</span><span style="FONT-FAMILY: 宋体">,因为可以多次修改一个项目,每次修改都需要用一个不同的特性实例来标记。</span></p>
<p class="MsoNormal"><span lang="EN-US">SupportsWhatsNew</span><span style="FONT-FAMILY: 宋体">是一个较小的类,表示不带任何参数的特性。这个特性是一个程序集的特性,用于把程序集标记为通过</span><span lang="EN-US">LastModifiedAttribute</span><span style="FONT-FAMILY: 宋体">维护的文档说明书。这样,以后查看这个程序集的程序会知道,它读取的程序集是我们所使用的自动文档说明过程上的那个程序集。这部分示例的完整源代码如下所示:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">using System;</span></p>
<p class="2" style="MARGIN-TOP: 6pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">namespace Wrox.ProCSharp.WhatsNewAttributes</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">{</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; [AttributeUsage(</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AttributeTargets.Class | AttributeTargets.Method,</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowMultiple=true, Inherited=false)]</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; public class LastModifiedAttribute : Attribute</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private DateTime dateModified;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string changes;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string issues;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public LastModifiedAttribute(string dateModified, string changes)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.dateModified = DateTime.Parse(dateModified);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.changes = changes;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public DateTime DateModified</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return dateModified;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string Changes</span></p>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?