<div id="cnblogs_post_body" class="blogpost-body blogpost-body-html">
<p><span style="font-size: 16px"><strong>Delphi 系统[26]关键字和保留字 of、as、is</strong></span></p>
<p><span style="font-size: 16px"><strong>1、定义:</strong></span></p>
<ul>
<li><span style="font-size: 16px">of :用于和其他关键字构成指定的结构。of可以与 case, class, array, file, set, object 连用。</span></li>
<li><span style="font-size: 16px">as :用于将一个类对象当作另一种类型使用。</span></li>
<li><span style="font-size: 16px">is :用于判断对象是否属于某一类型。</span></li>
</ul>
<p><span style="font-size: 16px"><strong>2、示例:</strong></span></p>
<div class="cnblogs_Highlighter sh-gutter">
<div><div id="highlighter_737423" class="syntaxhighlighter delphi"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="delphi comments">{ of 关键字 }</code></div><div class="line number2 index1 alt1"><code class="delphi keyword">type</code></div><div class="line number3 index2 alt2"><code class="delphi spaces"> </code><code class="delphi plain">TMyClass = </code><code class="delphi keyword">class</code> <code class="delphi keyword">of</code> <code class="delphi plain">TEdit;</code></div><div class="line number4 index3 alt1"><code class="delphi spaces"> </code><code class="delphi plain">TMyFun = </code><code class="delphi keyword">function</code><code class="delphi plain">(I: </code><code class="delphi keyword">Integer</code><code class="delphi plain">): </code><code class="delphi keyword">Integer</code> <code class="delphi keyword">of</code> <code class="delphi keyword">Object</code><code class="delphi plain">;</code></div><div class="line number5 index4 alt2"> </div><div class="line number6 index5 alt1"><code class="delphi keyword">procedure</code> <code class="delphi plain">TForm1</code><code class="delphi value">.</code><code class="delphi plain">Button1Click(Sender: TObject);</code></div><div class="line number7 index6 alt2"><code class="delphi keyword">var</code></div><div class="line number8 index7 alt1"><code class="delphi spaces"> </code><code class="delphi plain">MyArr : </code><code class="delphi keyword">array</code> <code class="delphi keyword">of</code> <code class="delphi keyword">Integer</code><code class="delphi plain">;</code></div><div class="line number9 index8 alt2"><code class="delphi spaces"> </code><code class="delphi plain">MyFile : </code><code class="delphi keyword">file</code> <code class="delphi keyword">of</code> <code class="delphi keyword">Byte</code><code class="delphi plain">;</code></div><div class="line number10 index9 alt1"><code class="delphi spaces"> </code><code class="delphi plain">MySet : </code><code class="delphi keyword">set</code> <code class="delphi keyword">of</code> <code class="delphi string">'A'</code> <code class="delphi plain">.. </code><code class="delphi string">'Z'</code><code class="delphi plain">;</code></div><div class="line number11 index10 alt2"><code class="delphi spaces"> </code><code class="delphi plain">MyClass : TMyClass;</code></div><div class="line number12 index11 alt1"><code class="delphi spaces"> </code><code class="delphi plain">MyFunc : TMyFun;</code></div><div class="line number13 index12 alt2"><code class="delphi keyword">begin</code></div><div class="line number14 index13 alt1"><code class="delphi spaces"> </code><code class="delphi keyword">case</code> <code class="delphi plain">Self</code><code class="delphi value">.</code><code class="delphi plain">Tag </code><code class="delphi keyword">of</code></div><div class="line number15 index14 alt2"><code class="delphi spaces"> </code><code class="delphi value">0</code><code class="delphi plain">:</code></div><div class="line number16 index15 alt1"><code class="delphi spaces"> </code><code class="delphi plain">Caption := </code><code class="delphi string">'Tag 为 0'</code><code class="delphi plain">;</code></div><div class="line number17 index16 alt2"><code class="delphi spaces"> </code><code class="delphi keyword">else</code></div><div class="line number18 index17 alt1"><code class="delphi spaces"> </code><code class="delphi plain">Caption := </code><code class="delphi string">'Tag 非 0'</code><code class="delphi plain">;</code></div><div class="line number19 index18 alt2"><code class="delphi spaces"> </code><code class="delphi keyword">end</code><code class="delphi plain">;</code></div><div class="line number20 index19 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div><div class="line number21 index20 alt2"> </div><div class="line number22 index21 alt1"><code class="delphi plain">--------------------------------------------------------------------------------------</code></div><div class="line number23 index22 alt2"><code class="delphi comments">{ as 关键字 }</code></div><div class="line number24 index23 alt1"><code class="delphi keyword">procedure</code> <code class="delphi plain">TForm1</code><code class="delphi value">.</code><code class="delphi plain">Button1Click(Sender: TObject);</code></div><div class="line number25 index24 alt2"><code class="delphi keyword">begin</code></div><div class="line number26 index25 alt1"><code class="delphi spaces"> </code><code class="delphi comments">{ Sender 本来是 TObject 类型,现在当作 TButton 类型使用 }</code></div><div class="line number27 index26 alt2"><code class="delphi spaces"> </code><code class="delphi plain">(Sender </code><code class="delphi keyword">as</code> <code class="delphi plain">TButton).Caption := </code><code class="delphi string">'测试 as 转换'</code></div><div class="line number28 index27 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div><div class="line number29 index28 alt2"> </div><div class="line number30 index29 alt1"><code class="delphi plain">---------------------------------------------------------------------------------------</code></div><div class="line number31 index30 alt2"><code class="delphi comments">{ is 关键字 判断 }</code></div><div class="line number32 index31 alt1"><code class="delphi keyword">procedure</code> <code class="delphi plain">TForm1</code><code class="delphi value">.</code><code class="delphi plain">Button1Click(Sender: TObject);</code></div><div class="line number33 index32 alt2"><code class="delphi keyword">begin</code></div><div class="line number34 index33 alt1"><code class="delphi spaces"> </code><code class="delphi keyword">if</code> <code class="delphi plain">Sender </code><code class="delphi keyword">is</code> <code class="delphi plain">TForm </code><code class="delphi keyword">then</code> <code class="delphi plain">ShowMessage(</code><code class="delphi string">'Sender is TForm'</code><code class="delphi plain">); </code><code class="delphi comments">{ 显然 Sender 与 TForm 无关 }</code></div><div class="line number35 index34 alt2"><code class="delphi spaces"> </code><code class="delphi keyword">if</code> <code class="delphi plain">Sender </code><code class="delphi keyword">is</code> <code class="delphi plain">TButton </code><code class="delphi keyword">then</code> <code class="delphi plain">ShowMessage(</code><code class="delphi string">'Sender is TButton'</code><code class="delphi plain">); </code><code class="delphi comments">{ Sender 就是 TButton }</code></div><div class="line number36 index35 alt1"><code class="delphi spaces"> </code><code class="delphi keyword">if</code> <code class="delphi plain">Sender </code><code class="delphi keyword">is</code> <code class="delphi plain">TCustomButton </code><code class="delphi keyword">then</code> <code class="delphi plain">ShowMessage(</code><code class="delphi string">'Sender is TCustomButton'</code><code class="delphi plain">); </code><code class="delphi comments">{ Sender 继承自 TCustomButton }</code></div><div class="line number37 index36 alt2"><code class="delphi spaces"> </code><code class="delphi keyword">if</code> <code class="delphi plain">Sender </code><code class="delphi keyword">is</code> <code class="delphi plain">TObject </code><code class="delphi keyword">then</code> <code class="delphi plain">ShowMessage(</code><code class="delphi string">'Sender is TObject'</code><code class="delphi plain">); </code><code class="delphi comments">{ Sender 继承自 TObject }</code></div><div class="line number38 index37 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div></div></td></tr></tbody></table></div></div>
</div>
<p><strong><span style="font-size: 16px">3、关于 as 的一些使用说明:</span></strong></p>
<p><span style="font-size: 16px">as运算符执行选中的类型转换。表示:</span></p>
<div class="cnblogs_Highlighter sh-gutter">
<div><div id="highlighter_530939" class="syntaxhighlighter delphi"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="delphi keyword">object</code> <code class="delphi keyword">as</code> <code class="delphi keyword">class</code></div></div></td></tr></tbody></table></div></div>
</div>
<p><span style="font-size: 16px">返回对与object相同的对象的引用,但其类型由类给定。在运行时,对象必须是由类或其子类之一表示的类的实例,或者为nil;否则将引发异常。如果声明的对象类型与类无关——也就是说,如果类型是不同的,并且一个不是另一个的祖先——则会产生编译错误。例如: </span></p>
<div class="cnblogs_Highlighter sh-gutter">
<div><div id="highlighter_820813" class="syntaxhighlighter delphi"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="delphi keyword">with</code> <code class="delphi plain">Sender </code><code class="delphi keyword">as</code> <code class="delphi plain">TButton </code><code class="delphi keyword">do</code></div><div class="line number2 index1 alt1"><code class="delphi keyword">begin</code></div><div class="line number3 index2 alt2"><code class="delphi spaces"> </code><code class="delphi plain">Caption := </code><code class="delphi string">'&Ok'</code><code class="delphi plain">;</code></div><div class="line number4 index3 alt1"><code class="delphi spaces"> </code><code class="delphi plain">OnClick := OkClick;</code></div><div class="line number5 index4 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div></div></td></tr></tbody></table></div></div>
</div>
<p><span style="font-size: 16px">运算符优先级规则通常要求as类型转换包含在括号中。例如:</span></p>
<div class="cnblogs_Highlighter sh-gutter">
<div><div id="highlighter_662681" class="syntaxhighlighter delphi"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="delphi plain">(Sender </code><code class="delphi keyword">as</code> <code class="delphi plain">TButton).Caption := </code><code class="delphi string">'&Ok'</code><code class="delphi plain">; </code><code class="delphi comments">//TButton(sender).Caption := '&Ok'; </code></div></div></td></tr></tbody></table></div></div>
</div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><span style="color: rgba(136, 136, 136, 1)">创建时间:2021.08.16 更新时间:</span></p>
</div>
77
发布时间 2023-05-07 14:24:03作者: 德琪