100165371.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 175 行 · 第 1/3 页
HTM
175 行
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> foreach (Attribute nextAttrib in attribs2)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> WriteAttributeInfo(nextAttrib);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> }</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> }</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US"> }</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 15pt"><span style="FONT-FAMILY: 宋体">注意,在这个方法中,首先应检查参数</span><span lang="EN-US">Type</span><span style="FONT-FAMILY: 宋体">引用是否表示一个类。为了简化代码,指定</span><span lang="EN-US">LastModified</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></p>
<p class="MsoNormal" style="LINE-HEIGHT: 15pt"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.2pt">接着使用</span><span lang="EN-US" style="LETTER-SPACING: -0.2pt">Attribute.GetCustomAttributes()</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.2pt">方法查找这个类是否有相关的</span><span lang="EN-US" style="LETTER-SPACING: -0.2pt">LastModifiedAttribute</span><span style="FONT-FAMILY: 宋体">实例。如果有,就使用帮助方法</span><span lang="EN-US">WriteAttributeInfo()</span><span style="FONT-FAMILY: 宋体">把它们的信息添加到输出文本中。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 15pt"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">最后使用</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">Type.GetMethods()</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">方法迭代这个数据类型的所有成员方法,然后对类的每个方法进行相同的处理:检查每个方法是否有相关的</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">LastModifiedAttribute</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">实例,如果有,用</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">WriteAttribute Info()</span><span style="FONT-FAMILY: 宋体">显示方法它们。</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 15pt"><span style="FONT-FAMILY: 宋体">下面的代码显示了</span><span lang="EN-US">WriteAttributeInfo()</span><span style="FONT-FAMILY: 宋体">方法,它负责确定为给定的</span><span lang="EN-US">LastModifiedAttribute</span><span style="FONT-FAMILY: 宋体">实例显示什么文本,注意这个方法的参数是一个</span><span lang="EN-US">Attribute</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"> static void WriteAttributeInfo(Attribute attrib)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> LastModifiedAttribute lastModifiedAttrib =</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> attrib as LastModifiedAttribute;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> if (lastModifiedAttrib == null)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> return;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> // check that date is in range</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> DateTime modifiedDate = lastModifiedAttrib.DateModified;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> if (modifiedDate < backDateTo)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> return;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> AddToMessage(" MODIFIED: " +</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> modifiedDate.ToLongDateString() + ":");</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> AddToMessage(" " + lastModifiedAttrib.Changes);</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> if (lastModifiedAttrib.Issues != null)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 13pt; FTEL: 18.45pt"><span lang="EN-US"> AddToMessage(" Outstanding issues:" + lastModifiedAttrib.Issues);</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US"> }</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">最后,是辅助方法</span><span lang="EN-US">AddToMessage()</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"> static void AddToMessage(string message)</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"> outputText.Append("\n" + message);</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US"> }</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">运行这段代码,得到如图</span><span lang="EN-US">10-2</span><span style="FONT-FAMILY: 宋体">所示的结果。</span></p>
<p align="center"><span lang="EN-US"><img height="422" src="10/image002.jpg" width="320" alt="" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="FONT-FAMILY: 宋体">图</span><span lang="EN-US"> 10-2</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">注意,在列出</span><span lang="EN-US">VectorClass</span><span style="FONT-FAMILY: 宋体">程序集中定义的类型时,<span style="LETTER-SPACING: -0.1pt">实际上选择了两个类:</span></span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">Vector</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">和内嵌的</span><span lang="EN-US" style="LETTER-SPACING: -0.1pt">VectorEnumerator</span><span style="FONT-FAMILY: 宋体; LETTER-SPACING: -0.1pt">类。</span><span style="FONT-FAMILY: 宋体">还要注意,这段代码把</span><span lang="EN-US">backDateTo</span><span style="FONT-FAMILY: 宋体">日期硬编码为</span><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体">月</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体">日,实际上选择的是日期为</span><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体">月</span><span lang="EN-US">14</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">1</span><span style="FONT-FAMILY: 宋体">月</span><span lang="EN-US">14</span><span style="FONT-FAMILY: 宋体">日</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">添加</span><span lang="EN-US">IFormattable</span><span style="FONT-FAMILY: 宋体">接口的时间</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">。</span></p></div>
<!-- page -->
<div class="page" style="text-align: center">
<a href="100165370.htm">上一页</a> <a href="index.html">首页</a> <a href="100165372.htm">下一页</a>
</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="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165371.htm'><font color='red'>10.2.4 完成WhatsNewAttributes示例</font></a></h1>
<div id="divRealteNod2" style="padding-left: 2px">
<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 style='float:left;width:49%'>·<a href='100165370.htm'>10.2.3 Assembly类</a></div><div style='float:right;width:49%'>·<a href='100165372.htm'>10.3 小结</a></div><div style='float:left;width:49%'>·<a href='100165419.htm'>14.1 代码访问的安全性</a></div><div style='float:right;width:49%'>·<a href='100165420.htm'>14.1.1 代码组</a></div></div>
</div>
</div>
</div>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?