<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[Black Meteor's Sky]]></title>
  <subtitle type="html"><![CDATA[黑夜给了我黑色的眼睛，流星给了我明亮的心]]></subtitle>
  <id>http://www.fo128.com/blog/</id> 
  <link rel="alternate" type="text/html" href="http://www.fo128.com/blog/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.fo128.com/blog/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.4.1022">PJBlog2</generator> 
  <updated>2008-07-16T11:43:34+08:00</updated> 

  <entry>
	  <title type="html"><![CDATA[怀念曾经的那段时光]]></title>
	  <author>
		 <name>freejanker</name>
		 <uri>http://www.fo128.com/blog/</uri>
		 <email></email>
	  </author>
	  <category term="" scheme="http://www.fo128.com/blog/default.asp?cateID=8" label="随笔┊工作生活" /> 
	  <updated>2008-07-16T11:43:34+08:00</updated>
	  <published>2008-07-16T11:43:34+08:00</published>
		  <summary type="html"><![CDATA[我很是享受现在地这种孤独地傻B地生活着,怀念曾经的那段时光!!]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.fo128.com/blog/default.asp?id=654" /> 
	  <id>http://www.fo128.com/blog/default.asp?id=654</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[纪念。。。。]]></title>
	  <author>
		 <name>freejanker</name>
		 <uri>http://www.fo128.com/blog/</uri>
		 <email></email>
	  </author>
	  <category term="" scheme="http://www.fo128.com/blog/default.asp?cateID=8" label="随笔┊工作生活" /> 
	  <updated>2008-05-22T09:50:37+08:00</updated>
	  <published>2008-05-22T09:50:37+08:00</published>
		  <summary type="html"><![CDATA[纪念。。。。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.fo128.com/blog/default.asp?id=653" /> 
	  <id>http://www.fo128.com/blog/default.asp?id=653</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[华硕官网今日被黑挂马]]></title>
	  <author>
		 <name>freejanker</name>
		 <uri>http://www.fo128.com/blog/</uri>
		 <email></email>
	  </author>
	  <category term="" scheme="http://www.fo128.com/blog/default.asp?cateID=8" label="随笔┊工作生活" /> 
	  <updated>2008-03-02T17:18:50+08:00</updated>
	  <published>2008-03-02T17:18:50+08:00</published>
		  <summary type="html"><![CDATA[被黑时间大概是今天下午5点，看图说话<br/><br/><img src="http://www.fo128.com/blogpic/asus0.jpg" border="0" alt=""/><br/><br/><img src="http://www.fo128.com/blogpic/asus1.jpg" border="0" alt=""/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.fo128.com/blog/default.asp?id=650" /> 
	  <id>http://www.fo128.com/blog/default.asp?id=650</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[驳“铁道部明确表示火车票实名制不可行”]]></title>
	  <author>
		 <name>freejanker</name>
		 <uri>http://www.fo128.com/blog/</uri>
		 <email></email>
	  </author>
	  <category term="" scheme="http://www.fo128.com/blog/default.asp?cateID=8" label="随笔┊工作生活" /> 
	  <updated>2008-01-19T20:57:28+08:00</updated>
	  <published>2008-01-19T20:57:28+08:00</published>
		  <summary type="html"><![CDATA[铁道部新闻发言人王勇？？<br/>先来确定一下这个人民公仆的身分，据查王勇铁道部新闻部发言人、铁道部政治部宣传部部长。<br/><br/>王勇的三条理由：首先，买不到票主要是因为运力紧张，实名制并不能解决这个问题。<br/>“运力紧张，所以实名制不能解决这个问题”，这是何种逻辑？<br/><br/>其次，春运期间客流量大，相当拥挤，而实名制将增加很多麻烦的程序，更加繁琐，在高峰时候不容易疏散，不快捷、便利。<br/>为人民服务，害怕麻烦？那要这样的公仆又有何用？！！！不容易疏散，不快捷、便利，这些难道都算在我们普通老百姓头上？你们这些公仆不应该去解决这些问题吗？<br/><br/>第三，实行售票实名制，最大目的就是为了打击票贩。但是如果票贩子瞅准了这个“市场”，为了获利，照样有其他渠道炒票。比如制造假身份证、假票据，实名制同样起不了作用。<br/>如果实名制后，票贩利用制造假身份证、假票据的手段来获利，票贩样还有利润空间？难道票贩都是傻瓜！！<br/><br/>“这是一种理想化的建议，我们没有考虑实行火车票实名制。”<br/>理想化的建议？共产主义是理想主义吗？难道你也不考虑？<br/><br/>就算以上理由都是成立的，难道就不能先拿一个或者两个城市试着使用实名制吗？你们真的有为老百姓着想吗？难道只要不死人，你们良心上就可以安稳地去拿那些你们不该拿的钱吗？<br/><br/>看看网上投票的调查，有多少的比例支持火车票实名制，还有那20%的人中国人，是什么属于社会哪一阶层的，可想而知。真是有点悲哀啊！！<br/><br/>最后劝告这些人民的公仆：放弃既得利益啊！！！！！]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.fo128.com/blog/default.asp?id=647" /> 
	  <id>http://www.fo128.com/blog/default.asp?id=647</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[时间溜走得很快。]]></title>
	  <author>
		 <name>freejanker</name>
		 <uri>http://www.fo128.com/blog/</uri>
		 <email></email>
	  </author>
	  <category term="" scheme="http://www.fo128.com/blog/default.asp?cateID=8" label="随笔┊工作生活" /> 
	  <updated>2007-12-29T10:24:39+08:00</updated>
	  <published>2007-12-29T10:24:39+08:00</published>
		  <summary type="html"><![CDATA[从中秋到元旦，时间不知不觉中过得真快。自己还是那样，没有多大改变。很久也没有更新Blog了，来年再来这里看看吧。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.fo128.com/blog/default.asp?id=645" /> 
	  <id>http://www.fo128.com/blog/default.asp?id=645</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Axure RP Pro4.6.2及注册码]]></title>
	  <author>
		 <name>freejanker</name>
		 <uri>http://www.fo128.com/blog/</uri>
		 <email></email>
	  </author>
	  <category term="" scheme="http://www.fo128.com/blog/default.asp?cateID=4" label="分享┊资源共享" /> 
	  <updated>2007-12-02T16:16:44+08:00</updated>
	  <published>2007-12-02T16:16:44+08:00</published>
		  <summary type="html"><![CDATA[一个画线框图的东东，以前用Viso实在有些有不习惯。相关工具比较可以参考<a target="_blank" href="http://blog.rexsong.com/?p=978">两类线框图的比较</a><br/><br/>以下内容摘自网络：<br/>Axure&nbsp;RP是一个极其实用的的快速原型工具，它可以将你的Web开发提高到一个你无法想象的空间，你可以用它尽情发挥你的想象。<br/>&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;我用它做一个UI通常只需要3分钟，和用户讨论一个流程通常只需要20分钟。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;软件下载地址：<a href="http://www.axure.com/" target="_blank">http://www.axure.com/</a>&nbsp;&nbsp;&nbsp;axure官方站点，请大家注意现在网络上的坏人太多，不要在不知名的网站上下东西！<br/><br/>Name：3ddown<br/>Serial：FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq+7w1RH97k5MWctqVHA&nbsp;<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.fo128.com/blog/default.asp?id=646" /> 
	  <id>http://www.fo128.com/blog/default.asp?id=646</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[中秋节快乐！！]]></title>
	  <author>
		 <name>freejanker</name>
		 <uri>http://www.fo128.com/blog/</uri>
		 <email></email>
	  </author>
	  <category term="" scheme="http://www.fo128.com/blog/default.asp?cateID=8" label="随笔┊工作生活" /> 
	  <updated>2007-09-25T13:47:18+08:00</updated>
	  <published>2007-09-25T13:47:18+08:00</published>
		  <summary type="html"><![CDATA[中秋节到了，在此祝大家事业和生活像中秋圆月，圆圆满满亮这堂堂！]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.fo128.com/blog/default.asp?id=642" /> 
	  <id>http://www.fo128.com/blog/default.asp?id=642</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Windows自动启动程序十大藏身之处]]></title>
	  <author>
		 <name>freejanker</name>
		 <uri>http://www.fo128.com/blog/</uri>
		 <email></email>
	  </author>
	  <category term="" scheme="http://www.fo128.com/blog/default.asp?cateID=4" label="分享┊资源共享" /> 
	  <updated>2007-09-25T13:41:30+08:00</updated>
	  <published>2007-09-25T13:41:30+08:00</published>
		  <summary type="html"><![CDATA[Windows启动时通常会有一大堆程序自动启动。不要以为管好了“开始→程序→启动”菜单就万事大吉，实际上，在Windows&nbsp;XP/2K中，让Windows自动启动程序的办法很多，下文告诉你最重要的两个文件夹和八个注册键。&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>一、当前用户专有的启动文件夹</strong><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是许多应用软件自动启动的常用位置，Windows自动启动放入该文件夹的所有快捷方式。用户启动文件夹一般在：＼Documents&nbsp;and&nbsp;Settings＼&lt;用户名字&gt;＼「开始」菜单＼程序＼启动，其中“&lt;用户名字&gt;”是当前登录的用户帐户名称。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>二、对所有用户有效的启动文件夹</strong><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是寻找自动启动程序的第二个重要位置，不管用户用什么身份登录系统，放入该文件夹的快捷方式总是自动启动——这是它与用户专有的启动文件夹的区别所在。该文件夹一般在：＼Documents&nbsp;and&nbsp;Settings＼All&nbsp;Users＼「开始」菜单＼程序＼启动。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>三、Load注册键</strong><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;介绍该注册键的资料不多，实际上它也能够自动启动程序。位置：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_CURRENT_USER＼Software＼Microsoft＼WindowsNT＼&nbsp;CurrentVersion＼Windows＼load。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>四、Userinit注册键</strong><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位置：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_LOCAL_MACHINE＼SOFTWARE＼Microsoft＼WindowsNT＼CurrentVersion＼<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Winlogon＼Userinit。这里也能够使系统启动时自动初始化程序。通常该注册键下面有一个userinit.exe，但这个键允许指定用逗号分隔的多个程序，例如“userinit.exe,OSA.exe”（不含引号）。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>五、Explorer＼Run注册键</strong><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;和load、Userinit不同，Explorer＼Run键在HKEY_CURRENT_USER和<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_LOCAL_MACHINE下都有，具体位置是：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_CURRENT_USER＼Software＼Microsoft＼Windows＼CurrentVersion＼Policies＼<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Explorer＼Run，和HKEY_LOCAL_MACHINE＼SOFTWARE＼Microsoft＼Windows<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;＼CurrentVersion＼Policies＼Explorer＼Run。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>六、RunServicesOnce注册键</strong><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RunServicesOnce注册键用来启动服务程序，启动时间在用户登录之前，而且先于其他通过注册键启动的程序。RunServicesOnce注册键的位置是：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_CURRENT_USER＼Software＼Microsoft＼Windows＼&nbsp;CurrentVersion＼RunServicesOnce，<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;和HKEY_LOCAL_MACHINE＼SOFTWARE＼Microsoft＼Windows＼<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrentVersion＼RunServicesOnce。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>七、RunServices注册键</strong><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行，但两者都在用户登录之前。RunServices的位置是：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_CURRENT_USER＼Software＼Microsoft＼Windows＼CurrentVersion＼RunServices，和<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_LOCAL_MACHINE＼SOFTWARE＼Microsoft＼Windows＼&nbsp;CurrentVersion＼RunServices。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>八、RunOnce＼Setup注册键</strong><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RunOnce＼Setup指定了用户登录之后运行的程序，它的位置是：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_CURRENT_USER＼Software＼Microsoft＼Windows＼CurrentVersion＼&nbsp;RunOnce＼Setup，<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;和HKEY_LOCAL_MACHINE＼SOFTWARE＼Microsoft＼Windows＼<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurrentVersion＼RunOnce＼Setup。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>九、RunOnce注册键</strong><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;安装程序通常用RunOnce键自动运行程序，它的位置在<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_LOCAL_MACHINE＼SOFTWARE＼Microsoft＼Windows＼CurrentVersion＼RunOnce和<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_CURRENT_USER＼Software＼Microsoft＼Windows＼CurrentVersion＼RunOnce。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_LOCAL_MACHINE下面的RunOnce键会在用户登录之后立即运行程序，运行时机在其他Run键指定的程序之前。HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及“启动”文件夹的内容之后运行。如果是XP，你还需要检查一下<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_LOCAL_MACHINE＼SOFTWARE＼Microsoft＼Windows＼&nbsp;CurrentVersion＼RunOnceEx。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>十、Run注册键</strong><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Run是自动运行程序最常用的注册键，位置在：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_CURRENT_USER＼Software＼Microsoft＼Windows＼CurrentVersion＼Run，和<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_LOCAL_MACHINE＼SOFTWARE＼Microsoft＼Windows＼CurrentVersion＼Run。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行，但两者都在处理“启动”文件夹之前。<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.fo128.com/blog/default.asp?id=641" /> 
	  <id>http://www.fo128.com/blog/default.asp?id=641</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[利用C#远程存取Access数据库 ]]></title>
	  <author>
		 <name>freejanker</name>
		 <uri>http://www.fo128.com/blog/</uri>
		 <email></email>
	  </author>
	  <category term="" scheme="http://www.fo128.com/blog/default.asp?cateID=2" label="摘录┊技术文献" /> 
	  <updated>2007-08-29T16:36:46+08:00</updated>
	  <published>2007-08-29T16:36:46+08:00</published>
		  <summary type="html"><![CDATA[目前，基于数据库服务器的桌面管理程序和Web程序已经有太多的应用了，尤其是网络的大量普及，孤立地数据库管理系统无法胜任分布式管理应用，但是面对基于Access数据库的现有的桌面应用我们也无法完全的摒弃。我们利用.Net&nbsp;远程处理功能将连接和存取Access的行为封装为一个远程对象，供网络中其它客户端通过调用该远程对象来存取实际的Access数据库。我们以&nbsp;C#&nbsp;2005&nbsp;为开发语言来实现上述功能。&nbsp;<br/><br/>　　一、&nbsp;技术要点&nbsp;<br/><br/>　　我们都知道Windows应用程序在运行时会启动一个进程，其总包括若干线程，不同的进程之间通信是开发分布式应用程序所必需的，传统上，这不仅需要深入了解通信流两端上进程的对象，而且还要深入了解低级别协议的宿主、应用程序编程接口以及配置工具等。总之，它是一项需要大量专业知识和经验的复杂任务。&nbsp;<br/><br/>　　幸好.Net为我们提供了远程处理功能，它所提供的通信方法可以快速而方便地完成上述建立通信的任务。因此，无论是需要快速开发&nbsp;Web&nbsp;应用程序，还是要花费更多时间生成关键的企业范围的应用程序，.NET&nbsp;Framework&nbsp;都会提供支持。通过&nbsp;.NET&nbsp;远程处理，客户端应用程序可以使用同一台计算机或其网络中其他任何可用的计算机上的其他进程中的对象。&nbsp;<br/><br/>　　要使用&nbsp;.NET&nbsp;远程处理创建可以让两个对象跨越应用程序直接通信的应用程序，只需生成以下对象即可：&nbsp;&nbsp;<br/><br/>　　1、&nbsp;可远程处理的对象。&nbsp;<br/><br/>　　2、&nbsp;侦听对该远程对象的请求的应用程序即服务器程序。&nbsp;<br/><br/>　　3、&nbsp;对该远程对象发出请求的客户端应用程序。&nbsp;<br/><br/>　　.Net下不同应用程序中的对象的通信方式有两种：一种是跨应用程序域边界传输对象副本，一种是使用代理交换消息。MarshalByRefObject&nbsp;是通过使用代理交换消息来进行通信的对象的基类。当跨应用程序使用远程对象时，对象的基类必须是从&nbsp;MarshalByRefObject&nbsp;继承。&nbsp;<br/><br/>　　二、&nbsp;程序实现&nbsp;<br/><br/>　　（1）我们先在VS的IDE中创建名为“TestRemoteAccess”的新的解决方案来容纳前述用来实现远程处理的三个项目，首先向解决方案中添加名为“RemoteObject”的类库，然后将默认创建的类名更改为“CRemoteAccess”，并且继承于“MarshalByRefObject”，代码如下：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;&nbsp;<br/>namespace&nbsp;RemoteObject&nbsp;<br/>{&nbsp;<br/>　public&nbsp;class&nbsp;CRemoteAccess&nbsp;:&nbsp;MarshalByRefObject&nbsp;<br/>　{}&nbsp;<br/>}&nbsp;<br/>　　我们需要在该对象内创建用于连接和存取本地Access数据库的所有函数，供服务端客户端程序同时调用。用于连接和存取Access数据库的方法这里不再详述，参看附件源码。&nbsp;<br/><br/>　　首先所有需要向客户端公开的函数其可见性都必须设为&nbsp;public。变量m_ConnString需要设置为public&nbsp;static，目的是当客户端调用了SetRemoteAccessConnString后将数据库连接字符串保存下来以备在本次连接期间始终能够访问，代码如下：&nbsp;<br/><br/>……&nbsp;<br/>public&nbsp;static&nbsp;string&nbsp;m_ConnString;&nbsp;<br/>……&nbsp;<br/>public&nbsp;void&nbsp;SetRemoteAccessConnString(string&nbsp;Connstr)&nbsp;<br/>{&nbsp;<br/>　m_ConnString&nbsp;=&nbsp;Connstr;&nbsp;<br/>}&nbsp;<br/>……&nbsp;&nbsp;<br/>　　成功连接了Access数据库后我们需要返回数据集给请求的客户端进行显示和编辑，在远程对象中我们声明了几个相关函数：&nbsp;<br/><br/>private&nbsp;void&nbsp;LoadData(string&nbsp;SqlStr,&nbsp;string&nbsp;TableName)&nbsp;<br/>public&nbsp;void&nbsp;SaveData(DataTable&nbsp;ClientDataTable)&nbsp;<br/>public&nbsp;DataTable&nbsp;GetUserTable(string&nbsp;SqlStr,&nbsp;string&nbsp;TableName)&nbsp;&nbsp;<br/>　　客户端可以传递SQL查询脚本通过调用&nbsp;GetUserTable来获取相关数据库表的数据，并返回一个DataTable，然后可以将该DataTable附值给DataGridView以便将数据显示出来。GetUserTable通过调用私有的LoadData&nbsp;函数来完成对数据的获取。SaveData函数用于将编辑过的数据集保存回本地Access数据库文件，代码如下：&nbsp;<br/><br/>……&nbsp;<br/>m_connection.Open();&nbsp;<br/>m_adapter.Up&#100;ate(ClientDataTable);&nbsp;<br/>……&nbsp;<br/>　　（2）远程对象创建完成，我们需要创建用于侦听该远程对象请求的服务端应用程序。在“TestRemoteAccess”解决方案中新建一个Windows窗体项目名为：“TestServer”，从工具箱中拖拽下几个组件，界面如下所示：&nbsp;<br/><br/><br/><br/>　　服务器程序TestServer除了具备远程访问对象的能力外，它最主要的作用就是获取实际的Access数据库文件路径，并且设置远程对象的数据库连接字符串。我们必须添加远程对象以及远程处理和网络通讯协议等的类库的引用。在服务器程序启动初始，需要创建远程对象的实例以及注册通信端口，然后调用RemotingConfiguration.RegisterWellKnownServiceType&nbsp;方法，MSDN中关于该方法的描述是这样的：通过使用给定的参数初始化&nbsp;WellKnownServiceTypeEntry&nbsp;的新实例，将服务端上的对象&nbsp;Type&nbsp;注册为已知类型，所有知道已注册已知对象的&nbsp;URI&nbsp;的客户都可以获取该对象的代理。所谓URI即统一资源标识符&nbsp;(Uniform&nbsp;Resource&nbsp;Identifier)。代码如下：&nbsp;<br/><br/>……&nbsp;<br/>remotableObject&nbsp;=&nbsp;new&nbsp;RemoteObject.CRemoteAccess();&nbsp;<br/>TcpChannel&nbsp;channel&nbsp;=&nbsp;new&nbsp;TcpChannel(8080);&nbsp;<br/>ChannelServices.RegisterChannel(channel);&nbsp;<br/>RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject.CRemoteAccess),&nbsp;&#34;RithiaTestAccessServer&#34;,&nbsp;WellKnownObjectMode.Singleton);&nbsp;<br/>……&nbsp;<br/>　　当选择了要进行存取的Access数据库文件后，我们需要调用远程对象的SetRemoteAccessConnString方法，该方法将保存在本次与服务器程序连接期间连接该Access数据库文件的连接字符串，代码如下：&nbsp;<br/><br/>……&nbsp;<br/>ProviderStr&nbsp;=&nbsp;ProviderStrPart&nbsp;+&nbsp;txtAccessMdbFileName.Text&nbsp;+&nbsp;&#34;;Jet&nbsp;OLEDB:Database&nbsp;Password=&#34;&nbsp;+&nbsp;txtAccessPassword.Text;&nbsp;<br/>……&nbsp;<br/>remotableObject.SetRemoteAccessConnString(ProviderStr);&nbsp;<br/>……&nbsp;<br/>　　（3）最后我们创建用于连接和请求服务的客户端程序，它会通过调用服务器程序TestServer已经注册的远程对象来获取相关数据集，并将编辑过的数据保存回实际的数据库文件。在“TestRemoteAccess”解决方案中新建一个Windows窗体项目名为：“TestClient”，从工具箱中拖拽下几个组件，界面如下所示：&nbsp;<br/><br/><br/><br/>　　客户端程序需要知道服务器程序所运行在的计算机名称或IP地址以及侦听的端口号，然后创建远程对象的实例，并且创建DataTable以便接收返回的数据，代码如下：&nbsp;<br/><br/>……&nbsp;<br/>string&nbsp;RemoteURL;&nbsp;<br/>Host&nbsp;=&nbsp;txtHost.Text;&nbsp;<br/>Port&nbsp;=&nbsp;txtPort.Text;&nbsp;<br/>RemoteURL&nbsp;=&nbsp;&#34;tcp://&#34;&nbsp;+&nbsp;Host&nbsp;+&nbsp;&#34;:&#34;&nbsp;+&nbsp;Port&nbsp;+&nbsp;&#34;/RithiaTestAccessServer&#34;;&nbsp;<br/>try&nbsp;<br/>{&nbsp;<br/>　TcpChannel&nbsp;chan&nbsp;=&nbsp;new&nbsp;TcpChannel();&nbsp;<br/>　ChannelServices.RegisterChannel(chan);&nbsp;<br/>　remoteObject&nbsp;=&nbsp;(RemoteObject.CRemoteAccess)Activator.GetObject(typeof(RemoteObject.CRemoteAccess),&nbsp;RemoteURL);&nbsp;<br/>　RemoteDataTable&nbsp;=&nbsp;new&nbsp;DataTable();&nbsp;<br/>　button3.Enabled&nbsp;=&nbsp;false;&nbsp;<br/>}&nbsp;<br/>catch&nbsp;(Exception&nbsp;E)&nbsp;<br/>{&nbsp;<br/>　MessageBox.Show(E.Message.ToString());&nbsp;<br/>}&nbsp;<br/>finally&nbsp;<br/>{&nbsp;<br/>}&nbsp;<br/>……&nbsp;&nbsp;<br/>　　客户端程序根据服务程序所侦听的信道是TCP还是HTTP来注册相应的信道和端口号，并且组合成远程对象的Url，即Url=&nbsp;信道://主机名:端口号/对象的Uri，然后创建远程对象的实例，就像使用本地对象一样可以对其进行存取，我们可以调用远程对象的GetUserTable方法获取指定查询脚本的结果集，代码如下：&nbsp;<br/><br/>……&nbsp;<br/>RemoteDataTable&nbsp;=&nbsp;remoteObject.GetUserTable(txtSQL.Text,&nbsp;&#34;Test&#34;);&nbsp;<br/>dataGridView1.DataSource&nbsp;=&nbsp;RemoteDataTable;&nbsp;<br/>……&nbsp;&nbsp;<br/>　　保存结果集时仅需简单调用SaveData方法即可，代码如下：&nbsp;<br/><br/>……&nbsp;<br/>remoteObject.SaveData(RemoteDataTable);&nbsp;<br/>……&nbsp;&nbsp;<br/><br/>　　三、&nbsp;结果&nbsp;<br/><br/>　　该程序成功地在Visual&nbsp;Studio&nbsp;.Net&nbsp;2005及Windows&nbsp;XP&nbsp;SP2下调试运行通过。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.fo128.com/blog/default.asp?id=640" /> 
	  <id>http://www.fo128.com/blog/default.asp?id=640</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[C#基础概念二十五问]]></title>
	  <author>
		 <name>freejanker</name>
		 <uri>http://www.fo128.com/blog/</uri>
		 <email></email>
	  </author>
	  <category term="" scheme="http://www.fo128.com/blog/default.asp?cateID=4" label="分享┊资源共享" /> 
	  <updated>2007-08-29T16:32:21+08:00</updated>
	  <published>2007-08-29T16:32:21+08:00</published>
		  <summary type="html"><![CDATA[当初学&nbsp;C#&nbsp;时是找个人大概问了一下数据类型和分支语句就开始做项目了。这两天又全面的看了一下相关的基础知识（学而时习之嘛），总结了25个问题：&nbsp;<br/><br/>1.静态变量和非静态变量的区别？&nbsp;<br/>2.const&nbsp;和&nbsp;static&nbsp;readonly&nbsp;区别？&nbsp;<br/>3.extern&nbsp;是什么意思？&nbsp;<br/>4.abstract&nbsp;是什么意思？&nbsp;<br/>5.internal&nbsp;修饰符起什么作用？&nbsp;<br/>6.sealed&nbsp;修饰符是干什么的？&nbsp;<br/>7.override&nbsp;和&nbsp;overload&nbsp;的区别？&nbsp;<br/>8.什么是索引指示器？&nbsp;<br/>9.new&nbsp;修饰符是起什么作用？&nbsp;<br/>10.this&nbsp;关键字的含义？&nbsp;<br/>11.可以使用抽象函数重写基类中的虚函数吗？&nbsp;<br/>12.密封类可以有虚函数吗？&nbsp;<br/>13.如果基类中的虚属性只有一个属性访问器，那么继承类重写该属性后可以有几个属性访问器？如果基类中有&nbsp;get&nbsp;和&nbsp;set&nbsp;两个呢？&nbsp;<br/>14.abstract&nbsp;可以和&nbsp;virtual&nbsp;一起使用吗？可以和&nbsp;override&nbsp;一起使用吗？&nbsp;<br/>15.接口可以包含哪些成员？&nbsp;<br/>16.类和结构的区别？&nbsp;<br/>17.接口的多继承会带来哪些问题？&nbsp;<br/>18.抽象类和接口的区别？&nbsp;<br/>19.别名指示符是什么？&nbsp;<br/>20.如何释放非托管资源？&nbsp;<br/>21.P/Invoke是什么？&nbsp;<br/>22.StringBuilder&nbsp;和&nbsp;String&nbsp;的区别？&nbsp;<br/>23.explicit&nbsp;和&nbsp;implicit&nbsp;的含义？&nbsp;<br/>24.params&nbsp;有什么用？&nbsp;<br/>25.什么是反射？&nbsp;&nbsp;<br/><br/>以下是我做的一份参考答案（C#&nbsp;语言范畴之内），如果有不准确、不全面的，欢迎各位朋友指正！&nbsp;<br/><br/>&nbsp;&nbsp;<br/>1.静态变量和非静态变量的区别？&nbsp;<br/><br/>答：&nbsp;<br/><br/>静态变量：&nbsp;<br/><br/>静态变量使用&nbsp;static&nbsp;修饰符进行声明&nbsp;<br/><br/>在所属类被装载时创建&nbsp;<br/><br/>通过类进行访问&nbsp;<br/><br/>所属类的所有实例的同一静态变量都是同一个值&nbsp;<br/><br/>非静态变量：&nbsp;<br/><br/>不带有&nbsp;static&nbsp;修饰符声明的变量称做非静态变量&nbsp;<br/><br/>在类被实例化时创建&nbsp;<br/><br/>通过对象进行访问&nbsp;<br/><br/>同一个类的不同实例的同一非静态变量可以是不同的值&nbsp;<br/><br/>示例：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example01&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Class1&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;staticStr&nbsp;=&nbsp;&#34;Class&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;notstaticStr&nbsp;=&nbsp;&#34;Obj&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//静态变量通过类进行访问，该类所有实例的同一静态变量都是同一个值&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;Class1&#39;s&nbsp;staticStr:&nbsp;{0}&#34;,&nbsp;Class1.staticStr);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class1&nbsp;tmpObj1&nbsp;=&nbsp;new&nbsp;Class1();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpObj1.notstaticStr&nbsp;=&nbsp;&#34;tmpObj1&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class1&nbsp;tmpObj2&nbsp;=&nbsp;new&nbsp;Class1();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpObj2.notstaticStr&nbsp;=&nbsp;&#34;tmpObj2&#34;;&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//非静态变量通过对象进行访问，不同对象的同一非静态变量可以有不同的值&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;tmpObj1&#39;s&nbsp;notstaticStr:&nbsp;{0}&#34;,&nbsp;tmpObj1.notstaticStr);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;tmpObj2&#39;s&nbsp;notstaticStr:&nbsp;{0}&#34;,&nbsp;tmpObj2.notstaticStr);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>Class1&#39;s&nbsp;staticStr:&nbsp;Class&nbsp;<br/>tmpObj1&#39;s&nbsp;notstaticStr:&nbsp;tmpObj1&nbsp;<br/>tmpObj2&#39;s&nbsp;notstaticStr:&nbsp;tmpObj2&nbsp;<br/><br/><br/>2.const&nbsp;和&nbsp;static&nbsp;readonly&nbsp;区别？&nbsp;<br/><br/>答：&nbsp;<br/><br/>const&nbsp;<br/><br/>用&nbsp;const&nbsp;修饰符声明的成员叫常量，是在编译期初始化并嵌入到客户端程序&nbsp;<br/><br/>static&nbsp;readonly&nbsp;<br/><br/>用&nbsp;static&nbsp;readonly&nbsp;修饰符声明的成员依然是变量，只不过具有和常量类似的使用方法：通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化&nbsp;<br/><br/>示例：&nbsp;<br/><br/>测试类：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example02Lib&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;Class1&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;const&nbsp;String&nbsp;strConst&nbsp;=&nbsp;&#34;Const&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;readonly&nbsp;String&nbsp;strStaticReadonly&nbsp;=&nbsp;&#34;StaticReadonly&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//public&nbsp;const&nbsp;String&nbsp;strConst&nbsp;=&nbsp;&#34;Const&nbsp;Changed&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//public&nbsp;static&nbsp;readonly&nbsp;String&nbsp;strStaticReadonly&nbsp;=&nbsp;&#34;StaticReadonly&nbsp;Changed&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>&nbsp;&nbsp;<br/>客户端代码：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>using&nbsp;Example02Lib;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example02&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//修改Example02中Class1的strConst初始值后，只编译Example02Lib项目&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//然后到资源管理器里把新编译的Example02Lib.dll拷贝Example02.exe所在的目录，执行Example02.exe&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//切不可在IDE里直接调试运行因为这会重新编译整个解决方案！！&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//可以看到strConst的输出没有改变，而strStaticReadonly的输出已经改变&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//表明Const变量是在编译期初始化并嵌入到客户端程序，而StaticReadonly是在运行时初始化的&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;strConst&nbsp;:&nbsp;{0}&#34;,&nbsp;Class1.strConst);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;strStaticReadonly&nbsp;:&nbsp;{0}&#34;,&nbsp;Class1.strStaticReadonly);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>strConst&nbsp;:&nbsp;Const&nbsp;<br/>strStaticReadonly&nbsp;:&nbsp;StaticReadonly&nbsp;&nbsp;<br/><br/>修改后的示例：&nbsp;<br/><br/>测试类：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example02Lib&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;Class1&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//public&nbsp;const&nbsp;String&nbsp;strConst&nbsp;=&nbsp;&#34;Const&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//public&nbsp;static&nbsp;readonly&nbsp;String&nbsp;strStaticReadonly&nbsp;=&nbsp;&#34;StaticReadonly&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;const&nbsp;String&nbsp;strConst&nbsp;=&nbsp;&#34;Const&nbsp;Changed&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;readonly&nbsp;String&nbsp;strStaticReadonly&nbsp;=&nbsp;&#34;StaticReadonly&nbsp;Changed&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果&nbsp;<br/><br/>strConst&nbsp;:&nbsp;Const&nbsp;<br/>strStaticReadonly&nbsp;:&nbsp;StaticReadonly&nbsp;Changed&nbsp;<br/><br/><br/>3.extern&nbsp;是什么意思？&nbsp;<br/><br/>答：&nbsp;<br/><br/>extern&nbsp;修饰符用于声明由程序集外部实现的成员函数&nbsp;<br/><br/>经常用于系统API函数的调用（通过&nbsp;DllImport&nbsp;）。注意，和DllImport一起使用时要加上&nbsp;static&nbsp;修饰符&nbsp;<br/><br/>也可以用于对于同一程序集不同版本组件的调用（用&nbsp;extern&nbsp;声明别名）&nbsp;<br/><br/>不能与&nbsp;abstract&nbsp;修饰符同时使用&nbsp;<br/><br/>示例：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>using&nbsp;System.Runtime.InteropServices;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example03&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//注意DllImport是一个Attribute&nbsp;Property，在System.Runtime.InteropServices命名空间中定义&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//extern与DllImport一起使用时必须再加上一个static修饰符&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(&#34;User32.dll&#34;)]&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;extern&nbsp;int&nbsp;MessageBox(int&nbsp;Handle,&nbsp;string&nbsp;Message,&nbsp;string&nbsp;Caption,&nbsp;int&nbsp;Type);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;int&nbsp;Main()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;myString;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.Write(&#34;Enter&nbsp;your&nbsp;message:&nbsp;&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myString&nbsp;=&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;MessageBox(0,&nbsp;myString,&nbsp;&#34;My&nbsp;Message&nbsp;Box&#34;,&nbsp;0);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>&nbsp;&nbsp;<br/><br/><br/>4.abstract&nbsp;是什么意思？&nbsp;<br/><br/>答：&nbsp;<br/><br/>abstract&nbsp;修饰符可以用于类、方法、属性、事件和索引指示器（indexer），表示其为抽象成员&nbsp;<br/><br/>abstract&nbsp;不可以和&nbsp;static&nbsp;、virtual&nbsp;、override&nbsp;一起使用&nbsp;<br/><br/>声明为&nbsp;abstract&nbsp;成员可以不包括实现代码，但只有类中还有未实现的抽象成员，该类就不可以被实例化，通常用于强制继承类必须实现某一成员&nbsp;<br/><br/>示例：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example04&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;#region&nbsp;基类，抽象类&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;abstract&nbsp;class&nbsp;BaseClass&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//抽象属性，同时具有get和set访问器表示继承类必须将该属性实现为可读写&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;abstract&nbsp;String&nbsp;Attribute&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//抽象方法，传入一个字符串参数无返回值&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;abstract&nbsp;void&nbsp;Function(String&nbsp;value);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//抽象事件，类型为系统预定义的代理(delegate)：EventHandler&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;abstract&nbsp;event&nbsp;EventHandler&nbsp;Event;&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//抽象索引指示器，只具有get访问器表示继承类必须将该索引指示器实现为只读&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;abstract&nbsp;Char&nbsp;this[int&nbsp;Index]&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;#endregion&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;#region&nbsp;继承类&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;DeriveClass&nbsp;:&nbsp;BaseClass&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;attribute;&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;String&nbsp;Attribute&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;attribute;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attribute&nbsp;=&nbsp;value;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;void&nbsp;Function(String&nbsp;value)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attribute&nbsp;=&nbsp;value;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Event&nbsp;!=&nbsp;null)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event(this,&nbsp;new&nbsp;EventArgs());&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;event&nbsp;EventHandler&nbsp;Event;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;Char&nbsp;this[int&nbsp;Index]&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;attribute[Index];&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;#endregion&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;OnFunction(object&nbsp;sender,&nbsp;EventArgs&nbsp;e)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;((DeriveClass)sender).Attribute.Length;&nbsp;i++)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(((DeriveClass)sender)[i]);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeriveClass&nbsp;tmpObj&nbsp;=&nbsp;new&nbsp;DeriveClass();&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpObj.Attribute&nbsp;=&nbsp;&#34;1234567&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpObj.Attribute);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将静态函数OnFunction与tmpObj对象的Event事件进行关联&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpObj.Event&nbsp;+=&nbsp;new&nbsp;EventHandler(OnFunction);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpObj.Function(&#34;7654321&#34;);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>1234567&nbsp;<br/>7&nbsp;<br/>6&nbsp;<br/>5&nbsp;<br/>4&nbsp;<br/>3&nbsp;<br/>2&nbsp;<br/>1&nbsp;&nbsp;<br/><br/><br/>5.internal&nbsp;修饰符起什么作用？&nbsp;<br/><br/>答：&nbsp;<br/><br/>internal&nbsp;修饰符可以用于类型或成员，使用该修饰符声明的类型或成员只能在同一程集内访问&nbsp;<br/><br/>接口的成员不能使用&nbsp;internal&nbsp;修饰符&nbsp;<br/><br/>示例&nbsp;<br/><br/>Example05Lib&nbsp;项目的&nbsp;Class1&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example05Lib&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;Class1&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internal&nbsp;String&nbsp;strInternal&nbsp;=&nbsp;null;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;strPublic;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果&nbsp;<br/>Example05Lib&nbsp;项目的&nbsp;Class2&nbsp;类可以访问到&nbsp;Class1&nbsp;的&nbsp;strInternal&nbsp;成员&nbsp;<br/><br/>&nbsp;&nbsp;<br/><br/>Example05&nbsp;项目的&nbsp;Program&nbsp;类无法访问到&nbsp;Class1&nbsp;的&nbsp;strInternal&nbsp;成员&nbsp;<br/><br/>&nbsp;&nbsp;<br/><br/><br/>6.sealed&nbsp;修饰符是干什么的？&nbsp;<br/><br/>答：&nbsp;<br/><br/>sealed&nbsp;修饰符表示密封&nbsp;<br/><br/>用于类时，表示该类不能再被继承，不能和&nbsp;abstract&nbsp;同时使用，因为这两个修饰符在含义上互相排斥&nbsp;<br/><br/>用于方法和属性时，表示该方法或属性不能再被继承，必须和&nbsp;override&nbsp;关键字一起使用，因为使用&nbsp;sealed&nbsp;修饰符的方法或属性肯定是基类中相应的虚成员&nbsp;<br/><br/>通常用于实现第三方类库时不想被客户端继承，或用于没有必要再继承的类以防止滥用继承造成层次结构体系混乱&nbsp;<br/><br/>恰当的利用&nbsp;sealed&nbsp;修饰符也可以提高一定的运行效率，因为不用考虑继承类会重写该成员&nbsp;<br/><br/>示例：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example06&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;A&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;virtual&nbsp;void&nbsp;F()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;A.F&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;virtual&nbsp;void&nbsp;G()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;A.G&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;B&nbsp;:&nbsp;A&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;sealed&nbsp;override&nbsp;void&nbsp;F()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;B.F&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;void&nbsp;G()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;B.G&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;C&nbsp;:&nbsp;B&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;void&nbsp;G()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;C.G&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;A().F();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;A().G();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;B().F();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;B().G();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;C().F();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;C().G();&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>类&nbsp;B&nbsp;在继承类&nbsp;A&nbsp;时可以重写两个虚函数，如图所示：&nbsp;<br/><br/>&nbsp;&nbsp;<br/><br/>由于类&nbsp;B&nbsp;中对&nbsp;F&nbsp;方法进行了密封，&nbsp;类&nbsp;C&nbsp;在继承类&nbsp;B&nbsp;时只能重写一个函数，如图所示：&nbsp;<br/><br/>&nbsp;&nbsp;<br/><br/>控制台输出结果，类&nbsp;C&nbsp;的方法&nbsp;F&nbsp;只能是输出&nbsp;类B&nbsp;中对该方法的实现：&nbsp;<br/><br/>A.F&nbsp;<br/>A.G&nbsp;<br/>B.F&nbsp;<br/>B.G&nbsp;<br/>B.F&nbsp;<br/>C.G&nbsp;&nbsp;<br/><br/><br/>7.override&nbsp;和&nbsp;overload&nbsp;的区别？&nbsp;<br/><br/>答：&nbsp;<br/><br/>override&nbsp;表示重写，用于继承类对基类中虚成员的实现&nbsp;<br/><br/>overload&nbsp;表示重载，用于同一个类中同名方法不同参数（包括类型不同或个数不同）的实现&nbsp;<br/><br/>示例：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example07&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;BaseClass&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;virtual&nbsp;void&nbsp;F()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;BaseClass.F&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;DeriveClass&nbsp;:&nbsp;BaseClass&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;void&nbsp;F()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.F();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;DeriveClass.F&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;Add(int&nbsp;Left,&nbsp;int&nbsp;Right)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;Add&nbsp;for&nbsp;Int:&nbsp;{0}&#34;,&nbsp;Left&nbsp;+&nbsp;Right);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;Add(double&nbsp;Left,&nbsp;double&nbsp;Right)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;Add&nbsp;for&nbsp;int:&nbsp;{0}&#34;,&nbsp;Left&nbsp;+&nbsp;Right);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DeriveClass&nbsp;tmpObj&nbsp;=&nbsp;new&nbsp;DeriveClass();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpObj.F();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpObj.Add(1,&nbsp;2);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpObj.Add(1.1,&nbsp;2.2);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>BaseClass.F&nbsp;<br/>DeriveClass.F&nbsp;<br/>Add&nbsp;for&nbsp;Int:&nbsp;3&nbsp;<br/>Add&nbsp;for&nbsp;int:&nbsp;3.3&nbsp;&nbsp;<br/><br/><br/>8.什么是索引指示器？&nbsp;<br/><br/>答：&nbsp;<br/><br/>实现索引指示器（indexer）的类可以象数组那样使用其实例后的对象，但与数组不同的是索引指示器的参数类型不仅限于int&nbsp;<br/><br/>简单来说，其本质就是一个含参数属性&nbsp;<br/><br/>示例：&nbsp;&nbsp;<br/><br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example08&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;Point&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;double&nbsp;x,&nbsp;y;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Point(double&nbsp;X,&nbsp;double&nbsp;Y)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;X;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y&nbsp;=&nbsp;Y;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//重写ToString方法方便输出&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;string&nbsp;ToString()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;String.Format(&#34;X:&nbsp;{0}&nbsp;,&nbsp;Y:&nbsp;{1}&#34;,&nbsp;x,&nbsp;y);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;Points&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Point[]&nbsp;points;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Points(Point[]&nbsp;Points)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;points&nbsp;=&nbsp;Points;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;PointNumber&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;points.Length;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//实现索引访问器&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Point&nbsp;this[int&nbsp;Index]&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;points[Index];&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//感谢watson&nbsp;hua(<a href="http://huazhihao.cnblogs.com/" target="_blank">http://huazhihao.cnblogs.com/</a>)的指点&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//索引指示器的实质是含参属性，参数并不只限于int&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;WeatherOfWeek&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;this[int&nbsp;Index]&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//注意case段使用return直接返回所以不需要break&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(Index)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&#34;Today&nbsp;is&nbsp;cloudy!&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;5:&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&#34;Today&nbsp;is&nbsp;thundershower!&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&#34;Today&nbsp;is&nbsp;fine!&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;this[string&nbsp;Day]&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;TodayWeather&nbsp;=&nbsp;null;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//switch的标准写法&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(Day)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&#34;Sunday&#34;:&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TodayWeather&nbsp;=&nbsp;&#34;Today&nbsp;is&nbsp;cloudy!&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&#34;Friday&#34;:&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TodayWeather&nbsp;=&nbsp;&#34;Today&nbsp;is&nbsp;thundershower!&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TodayWeather&nbsp;=&nbsp;&#34;Today&nbsp;is&nbsp;fine!&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;TodayWeather;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Point[]&nbsp;tmpPoints&nbsp;=&nbsp;new&nbsp;Point[10];&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;tmpPoints.Length;&nbsp;i++)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpPoints[i]&nbsp;=&nbsp;new&nbsp;Point(i,&nbsp;Math.Sin(i));&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Points&nbsp;tmpObj&nbsp;=&nbsp;new&nbsp;Points(tmpPoints);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;tmpObj.PointNumber;&nbsp;i++)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpObj[i]);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string[]&nbsp;Week&nbsp;=&nbsp;new&nbsp;string[]&nbsp;{&nbsp;&#34;Sunday&#34;,&nbsp;&#34;Monday&#34;,&nbsp;&#34;Tuesday&#34;,&nbsp;&#34;Wednesday&#34;,&nbsp;&#34;Thursday&#34;,&nbsp;&#34;Friday&#34;,&nbsp;&#34;Staurday&#34;};&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WeatherOfWeek&nbsp;tmpWeatherOfWeek&nbsp;=&nbsp;new&nbsp;WeatherOfWeek();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;6;&nbsp;i++)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpWeatherOfWeek[i]);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(string&nbsp;tmpDay&nbsp;in&nbsp;Week)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpWeatherOfWeek[tmpDay]);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>X:&nbsp;0&nbsp;,&nbsp;Y:&nbsp;0&nbsp;<br/>X:&nbsp;1&nbsp;,&nbsp;Y:&nbsp;0.841470984807897&nbsp;<br/>X:&nbsp;2&nbsp;,&nbsp;Y:&nbsp;0.909297426825682&nbsp;<br/>X:&nbsp;3&nbsp;,&nbsp;Y:&nbsp;0.141120008059867&nbsp;<br/>X:&nbsp;4&nbsp;,&nbsp;Y:&nbsp;-0.756802495307928&nbsp;<br/>X:&nbsp;5&nbsp;,&nbsp;Y:&nbsp;-0.958924274663138&nbsp;<br/>X:&nbsp;6&nbsp;,&nbsp;Y:&nbsp;-0.279415498198926&nbsp;<br/>X:&nbsp;7&nbsp;,&nbsp;Y:&nbsp;0.656986598718789&nbsp;<br/>X:&nbsp;8&nbsp;,&nbsp;Y:&nbsp;0.989358246623382&nbsp;<br/>X:&nbsp;9&nbsp;,&nbsp;Y:&nbsp;0.412118485241757&nbsp;<br/>Today&nbsp;is&nbsp;cloudy!&nbsp;<br/>Today&nbsp;is&nbsp;fine!&nbsp;<br/>Today&nbsp;is&nbsp;fine!&nbsp;<br/>Today&nbsp;is&nbsp;fine!&nbsp;<br/>Today&nbsp;is&nbsp;fine!&nbsp;<br/>Today&nbsp;is&nbsp;thundershower!&nbsp;<br/>Today&nbsp;is&nbsp;cloudy!&nbsp;<br/>Today&nbsp;is&nbsp;fine!&nbsp;<br/>Today&nbsp;is&nbsp;fine!&nbsp;<br/>Today&nbsp;is&nbsp;fine!&nbsp;<br/>Today&nbsp;is&nbsp;fine!&nbsp;<br/>Today&nbsp;is&nbsp;thundershower!&nbsp;<br/>Today&nbsp;is&nbsp;fine!&nbsp;<br/><br/>&nbsp;&nbsp;<br/><br/>9.new&nbsp;修饰符是起什么作用？&nbsp;<br/><br/>答：&nbsp;<br/><br/>new&nbsp;修饰符与&nbsp;new&nbsp;操作符是两个概念&nbsp;<br/><br/>new&nbsp;修饰符用于声明类或类的成员，表示隐藏了基类中同名的成员。而new&nbsp;操作符用于实例化一个类型&nbsp;<br/><br/>new&nbsp;修饰符只能用于继承类，一般用于弥补基类设计的不足&nbsp;<br/><br/>new&nbsp;修饰符和&nbsp;override&nbsp;修饰符不可同时用在一个成员上，因为这两个修饰符在含义上互相排斥&nbsp;<br/><br/>示例：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example09&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;BaseClass&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//基类设计者声明了一个PI的公共变量，方便进行运算&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;double&nbsp;PI&nbsp;=&nbsp;3.1415;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;DervieClass&nbsp;:&nbsp;BaseClass&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//继承类发现该变量的值不能满足运算精度，于是可以通过new修饰符显示隐藏基类中的声明&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;new&nbsp;static&nbsp;double&nbsp;PI&nbsp;=&nbsp;3.1415926;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(BaseClass.PI);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(DervieClass.PI);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>3.1415&nbsp;<br/>3.1415926&nbsp;&nbsp;<br/><br/><br/>10.this&nbsp;关键字的含义？&nbsp;<br/><br/>答：&nbsp;<br/><br/>this&nbsp;是一个保留字，仅限于构造函数和方法成员中使用&nbsp;<br/><br/>在类的构造函数中出现表示对正在构造的对象本身的引用，在类的方法中出现表示对调用该方法的对象的引用，在结构的构造上函数中出现表示对正在构造的结构的引用，在结构的方法中出现表示对调用该方法的结果的引用&nbsp;<br/><br/>this&nbsp;保留字不能用于静态成员的实现里，因为这时对象或结构并未实例化&nbsp;<br/><br/>在&nbsp;C#&nbsp;系统中，this&nbsp;实际上是一个常量，所以不能使用&nbsp;this++&nbsp;这样的运算&nbsp;<br/><br/>this&nbsp;保留字一般用于限定同名的隐藏成员、将对象本身做为参数、声明索引访问器、判断传入参数的对象是否为本身&nbsp;<br/><br/>示例：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example10&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Class1&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;double&nbsp;c;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;string&nbsp;value;&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;double&nbsp;C&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;c;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Class1(double&nbsp;c)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//限定同名的隐藏成员&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.c&nbsp;=&nbsp;c;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Class1(Class1&nbsp;value)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用对象本身实例化自己没有意义&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(this&nbsp;!=&nbsp;value)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;value.C;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;string&nbsp;ToString()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将对象本身做为参数&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;string.Format(&#34;{0}&nbsp;Celsius&nbsp;=&nbsp;{1}&nbsp;Fahrenheit&#34;,&nbsp;c,&nbsp;UnitTransClass.C2F(this));&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//由于好奇，在这做了一个效率测试，想看看到底哪种方式访问成员变量更快，结论：区别不大。。。&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Test1()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;vTickCount&nbsp;=&nbsp;Environment.TickCount;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;10000000;&nbsp;i++)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.value&nbsp;=&nbsp;i.ToString();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;string.Format(&#34;Have&nbsp;this.:&nbsp;{0}&nbsp;MSEL&#34;,&nbsp;Environment.TickCount&nbsp;-&nbsp;vTickCount);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;Test2()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;vTickCount&nbsp;=&nbsp;Environment.TickCount;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;10000000;&nbsp;i++)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;i.ToString();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;string.Format(&#34;Don&#39;t&nbsp;have&nbsp;this.:&nbsp;{0}&nbsp;MSEL&#34;,&nbsp;Environment.TickCount&nbsp;-&nbsp;vTickCount);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;UnitTransClass&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;double&nbsp;C2F(Class1&nbsp;value)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//摄氏到华氏的转换公式&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1.8&nbsp;*&nbsp;value.C&nbsp;+&nbsp;32;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class1&nbsp;tmpObj&nbsp;=&nbsp;new&nbsp;Class1(37.5);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpObj);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpObj.Test1());&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpObj.Test2());&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>37.5&nbsp;Celsius&nbsp;=&nbsp;99.5&nbsp;Fahrenheit&nbsp;<br/>Have&nbsp;this.:&nbsp;4375&nbsp;MSEL&nbsp;<br/>Don&#39;t&nbsp;have&nbsp;this.:&nbsp;4406&nbsp;MSEL&nbsp;&nbsp;<br/><br/><br/>11.可以使用抽象函数重写基类中的虚函数吗？&nbsp;<br/><br/>答：&nbsp;<br/><br/>可以，但需使用&nbsp;new&nbsp;修饰符显式声明，表示隐藏了基类中该函数的实现&nbsp;<br/><br/>示例:&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;BaseClass&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;virtual&nbsp;void&nbsp;F()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;BaseClass.F&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;abstract&nbsp;class&nbsp;&nbsp;DeriveClass&nbsp;:&nbsp;BaseClass&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;new&nbsp;abstract&nbsp;void&nbsp;F();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/><br/>12.密封类可以有虚函数吗？&nbsp;<br/><br/>答：&nbsp;<br/><br/>可以，基类中的虚函数将隐式的转化为非虚函数，但密封类本身不能再增加新的虚函数&nbsp;<br/><br/>示例：&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;BaseClass&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;virtual&nbsp;void&nbsp;F()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;BaseClass.F&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;sealed&nbsp;class&nbsp;DeriveClass&nbsp;:&nbsp;BaseClass&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//基类中的虚函数F被隐式的转化为非虚函数&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//密封类中不能再声明新的虚函数G&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//public&nbsp;virtual&nbsp;void&nbsp;G()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;DeriveClass.G&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/><br/>13.如果基类中的虚属性只有一个属性访问器，那么继承类重写该属性后可以有几个属性访问器？如果基类中有&nbsp;get&nbsp;和&nbsp;set&nbsp;两个呢？&nbsp;<br/><br/>答：&nbsp;<br/><br/>如果基类中的虚属性只有一个属性访问器，那么继承类重写该属性后也应只有一个。如果基类中有&nbsp;get&nbsp;和&nbsp;set&nbsp;两个属性访问器，那么继承类中可以只有一个也可以同时有两个属性访问器&nbsp;<br/><br/><br/>14.abstract&nbsp;可以和&nbsp;virtual&nbsp;一起使用吗？可以和&nbsp;override&nbsp;一起使用吗？&nbsp;<br/><br/>答：&nbsp;<br/><br/>abstract&nbsp;修饰符不可以和&nbsp;static、virtual&nbsp;和&nbsp;override&nbsp;修饰符一起使用&nbsp;<br/><br/><br/>15.接口可以包含哪些成员？&nbsp;<br/><br/>答：&nbsp;<br/><br/>接口可以包含属性、方法、索引指示器和事件，但不能包含常量、域、操作符、构造函数和析构函数，而且也不能包含任何静态成员&nbsp;<br/><br/>&nbsp;&nbsp;<br/><br/>16.类和结构的区别？&nbsp;<br/><br/>答：&nbsp;<br/>类：&nbsp;<br/><br/>类是引用类型在堆上分配，类的实例进行赋值只是复制了引用，都指向同一段实际对象分配的内存&nbsp;<br/><br/>类有构造和析构函数&nbsp;<br/><br/>类可以继承和被继承&nbsp;<br/><br/>结构：&nbsp;<br/><br/>结构是值类型在栈上分配（虽然栈的访问速度比较堆要快，但栈的资源有限放），结构的赋值将分配产生一个新的对象。&nbsp;<br/><br/>结构没有构造函数，但可以添加。结构没有析构函数&nbsp;<br/><br/>结构不可以继承自另一个结构或被继承，但和类一样可以继承自接口&nbsp;<br/><br/>&nbsp;&nbsp;<br/><br/>示例：&nbsp;<br/><br/>根据以上比较，我们可以得出一些轻量级的对象最好使用结构，但数据量大或有复杂处理逻辑对象最好使用类。&nbsp;<br/><br/>如：Geoemtry（GIS&nbsp;里的一个概论，在&nbsp;OGC&nbsp;标准里有定义）&nbsp;最好使用类，而&nbsp;Geometry&nbsp;中点的成员最好使用结构&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example16&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;interface&nbsp;IPoint&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;X&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;Y&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;Z&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//结构也可以从接口继承&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;Point:&nbsp;IPoint&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;double&nbsp;x,&nbsp;y,&nbsp;z;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结构也可以增加构造函数&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Point(double&nbsp;X,&nbsp;double&nbsp;Y,&nbsp;double&nbsp;Z)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.x&nbsp;=&nbsp;X;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.y&nbsp;=&nbsp;Y;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.z&nbsp;=&nbsp;Z;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;double&nbsp;X&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;x;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;x&nbsp;=&nbsp;value;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;double&nbsp;Y&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;x;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;x&nbsp;=&nbsp;value;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;double&nbsp;Z&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;x;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;x&nbsp;=&nbsp;value;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//在此简化了点状Geometry的设计，实际产品中还包含Project（坐标变换）等复杂操作&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;PointGeometry&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Point&nbsp;value;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;PointGeometry(double&nbsp;X,&nbsp;double&nbsp;Y,&nbsp;double&nbsp;Z)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;new&nbsp;Point(X,&nbsp;Y,&nbsp;Z);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;PointGeometry(Point&nbsp;value)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结构的赋值将分配新的内存&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.value&nbsp;=&nbsp;value;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;double&nbsp;X&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;value.X;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;this.value.X&nbsp;=&nbsp;value;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;double&nbsp;Y&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;value.Y;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;this.value.Y&nbsp;=&nbsp;value;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;double&nbsp;Z&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;value.Z;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;this.value.Z&nbsp;=&nbsp;value;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;PointGeometry&nbsp;operator&nbsp;+(PointGeometry&nbsp;Left,&nbsp;PointGeometry&nbsp;Rigth)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;PointGeometry(Left.X&nbsp;+&nbsp;Rigth.X,&nbsp;Left.Y&nbsp;+&nbsp;Rigth.Y,&nbsp;Left.Z&nbsp;+&nbsp;Rigth.Z);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;string&nbsp;ToString()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;string.Format(&#34;X:&nbsp;{0},&nbsp;Y:&nbsp;{1},&nbsp;Z:&nbsp;{2}&#34;,&nbsp;value.X,&nbsp;value.Y,&nbsp;value.Z);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Point&nbsp;tmpPoint&nbsp;=&nbsp;new&nbsp;Point(1,&nbsp;2,&nbsp;3);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PointGeometry&nbsp;tmpPG1&nbsp;=&nbsp;new&nbsp;PointGeometry(tmpPoint);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PointGeometry&nbsp;tmpPG2&nbsp;=&nbsp;new&nbsp;PointGeometry(tmpPoint);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpPG2.X&nbsp;=&nbsp;4;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpPG2.Y&nbsp;=&nbsp;5;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpPG2.Z&nbsp;=&nbsp;6;&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//由于结构是值类型，tmpPG1&nbsp;和&nbsp;tmpPG2&nbsp;的坐标并不一样&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpPG1);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpPG2);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//由于类是引用类型，对tmpPG1坐标修改后影响到了tmpPG3&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PointGeometry&nbsp;tmpPG3&nbsp;=&nbsp;tmpPG1;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpPG1.X&nbsp;=&nbsp;7;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpPG1.Y&nbsp;=&nbsp;8;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpPG1.Z&nbsp;=&nbsp;9;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpPG1);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpPG3);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>X:&nbsp;1,&nbsp;Y:&nbsp;2,&nbsp;Z:&nbsp;3&nbsp;<br/>X:&nbsp;4,&nbsp;Y:&nbsp;5,&nbsp;Z:&nbsp;6&nbsp;<br/>X:&nbsp;7,&nbsp;Y:&nbsp;8,&nbsp;Z:&nbsp;9&nbsp;<br/>X:&nbsp;7,&nbsp;Y:&nbsp;8,&nbsp;Z:&nbsp;9&nbsp;&nbsp;<br/><br/><br/>17.接口的多继承会带来哪些问题？&nbsp;<br/><br/>答：&nbsp;<br/><br/>C#&nbsp;中的接口与类不同，可以使用多继承，即一个子接口可以有多个父接口。但如果两个父成员具有同名的成员，就产生了二义性（这也正是&nbsp;C#&nbsp;中类取消了多继承的原因之一），这时在实现时最好使用显式的声明&nbsp;<br/><br/>示例：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example17&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//一个完整的接口声明示例&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interface&nbsp;IExample&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//属性&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;P&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//方法&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;F(int&nbsp;Value);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//事件&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event&nbsp;EventHandler&nbsp;E;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//索引指示器&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;this[int&nbsp;Index]&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interface&nbsp;IA&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;Count&nbsp;{&nbsp;get;&nbsp;set;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interface&nbsp;IB&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;Count();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//IC接口从IA和IB多重继承&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;interface&nbsp;IC&nbsp;:&nbsp;IA,&nbsp;IB&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;C&nbsp;:&nbsp;IC&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;int&nbsp;count&nbsp;=&nbsp;100;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显式声明实现IA接口中的Count属性&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;IA.Count&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;100;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;count&nbsp;=&nbsp;value;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显式声明实现IB接口中的Count方法&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;IB.Count()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;count&nbsp;*&nbsp;count;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C&nbsp;tmpObj&nbsp;=&nbsp;new&nbsp;C();&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调用时也要显式转换&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;Count&nbsp;property:&nbsp;{0}&#34;,&nbsp;((IA)tmpObj).Count);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;Count&nbsp;function:&nbsp;{0}&#34;,&nbsp;((IB)tmpObj).Count());&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>Count&nbsp;property:&nbsp;100&nbsp;<br/>Count&nbsp;function:&nbsp;10000&nbsp;&nbsp;<br/><br/><br/>18.抽象类和接口的区别？&nbsp;<br/><br/>答：&nbsp;<br/><br/>抽象类（abstract&nbsp;class）可以包含功能定义和实现，接口（interface）只能包含功能定义&nbsp;<br/><br/>抽象类是从一系列相关对象中抽象出来的概念，&nbsp;因此反映的是事物的内部共性；接口是为了满足外部调用而定义的一个功能约定，&nbsp;因此反映的是事物的外部特性&nbsp;<br/><br/>分析对象，提炼内部共性形成抽象类，用以表示对象本质，即“是什么”&nbsp;<br/><br/>为外部提供调用或功能需要扩充时优先使用接口&nbsp;<br/><br/><br/>19.别名指示符是什么？&nbsp;<br/><br/>答：&nbsp;<br/><br/>通过别名指示符我们可以为某个类型起一个别名&nbsp;<br/><br/>主要用于解决两个命名空间内有同名类型的冲突或避免使用冗余的命名空间&nbsp;<br/><br/>别名指示符只在一个单元文件内起作用&nbsp;<br/><br/>示例：&nbsp;<br/><br/>Class1.cs:&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib01&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Class1&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;string&nbsp;ToString()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&#34;com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib01&#39;s&nbsp;Class1&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>Class2.cs&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib02&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Class1&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;string&nbsp;ToString()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&#34;com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib02&#39;s&nbsp;Class1&#34;;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>主单元（Program.cs）：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>//使用别名指示符解决同名类型的冲突&nbsp;<br/>using&nbsp;Lib01Class1&nbsp;=&nbsp;com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib01.Class1;&nbsp;<br/>using&nbsp;Lib02Class2&nbsp;=&nbsp;com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib02.Class1;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example19&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lib01Class1&nbsp;tmpObj1&nbsp;=&nbsp;new&nbsp;Lib01Class1();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lib02Class2&nbsp;tmpObj2&nbsp;=&nbsp;new&nbsp;Lib02Class2();&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpObj1);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpObj2);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib01&#39;s&nbsp;Class1&nbsp;<br/>com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib02&#39;s&nbsp;Class1&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;<br/><br/>20.如何释放非托管资源？&nbsp;<br/><br/>答：&nbsp;<br/><br/>&nbsp;.NET&nbsp;平台在内存管理方面提供了GC（Garbage&nbsp;Collection），负责自动释放托管资源和内存回收的工作，但它无法对非托管资源进行释放，这时我们必须自己提供方法来释放对象内分配的非托管资源，比如你在对象的实现代码中使用了一个COM对象&nbsp;<br/><br/>最简单的办法，可以通过实现protected&nbsp;void&nbsp;Finalize()（析构函数会在编译时变成这个东东）来释放非托管资源，因为GC在释放对象时会检查该对象是否实现了&nbsp;Finalize()&nbsp;方法，如果是则调用它。但，据说这样会降低效率。。。&nbsp;<br/><br/>有一种更好的，那就是通过实现一个接口显式的提供给客户调用端手工释放对象的方法，而不是傻傻的等着GC来释放我们的对象（何况效率又那么低）&nbsp;<br/><br/>System&nbsp;命名空间内有一个&nbsp;IDisposable&nbsp;接口，拿来做这事非常合适，就省得我们自己再声明一个接口了&nbsp;<br/><br/>另外补充一句，这种实现并不一定要使用了非托管资源后才用，如果你设计的类会在运行时有大些的实例（象&nbsp;GIS&nbsp;中的Geometry），为了优化程序性能，你也可以通过实现该接口让客户调用端在确认不需要这些对象时手工释放它们&nbsp;<br/><br/>示例：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example20&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Class1&nbsp;:&nbsp;IDisposable&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//析构函数，编译后变成&nbsp;protected&nbsp;void&nbsp;Finalize()，GC会在回收对象前会调用调用该方法&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~Class1()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dispose(false);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//通过实现该接口，客户可以显式地释放对象，而不需要等待GC来释放资源，据说那样会降低效率&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;IDisposable.Dispose()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dispose(true);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将释放非托管资源设计成一个虚函数，提供在继承类中释放基类的资源的能力&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;virtual&nbsp;void&nbsp;ReleaseUnmanageResources()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Do&nbsp;something...&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//私有函数用以释放非托管资源&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;Dispose(bool&nbsp;disposing)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReleaseUnmanageResources();&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//为true时表示是客户显式调用了释放函数，需通知GC不要再调用对象的Finalize方法&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//为false时肯定是GC调用了对象的Finalize方法，所以没有必要再告诉GC你不要调用我的Finalize方法啦&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(disposing)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GC.SuppressFinalize(this);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//tmpObj1没有手工释放资源，就等着GC来慢慢的释放它吧&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class1&nbsp;tmpObj1&nbsp;=&nbsp;new&nbsp;Class1();&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//tmpObj2调用了Dispose方法，传说比等着GC来释放它效率要调一些&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//个人认为是因为要逐个对象的查看其元数据，以确认是否实现了Dispose方法吧&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//当然最重要的是我们可以自己确定释放的时间以节省内存，优化程序运行效率&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class1&nbsp;tmpObj2&nbsp;=&nbsp;new&nbsp;Class1();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((IDisposable)tmpObj2).Dispose();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/><br/>21.P/Invoke是什么？&nbsp;<br/><br/>答：&nbsp;<br/><br/>在受控代码与非受控代码进行交互时会产生一个事务（transition）&nbsp;，这通常发生在使用平台调用服务（Platform&nbsp;Invocation&nbsp;Services），即P/Invoke&nbsp;<br/><br/>如调用系统的&nbsp;API&nbsp;或与&nbsp;COM&nbsp;对象打交道，通过&nbsp;System.Runtime.InteropServices&nbsp;命名空间&nbsp;<br/><br/>虽然使用&nbsp;Interop&nbsp;非常方便，但据估计每次调用事务都要执行&nbsp;10&nbsp;到&nbsp;40&nbsp;条指令，算起来开销也不少，所以我们要尽量少调用事务&nbsp;<br/><br/>如果非用不可，建议本着一次调用执行多个动作，而不是多次调用每次只执行少量动作的原则&nbsp;<br/><br/>&nbsp;&nbsp;<br/><br/>22.StringBuilder&nbsp;和&nbsp;String&nbsp;的区别？&nbsp;<br/><br/>答：&nbsp;<br/><br/>String&nbsp;虽然是一个引用类型，但在赋值操作时会产生一个新的对象，而&nbsp;StringBuilder&nbsp;则不会&nbsp;<br/><br/>所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用&nbsp;StringBuilder，不要使用&nbsp;String&nbsp;<br/><br/>示例：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example22&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;int&nbsp;cycle&nbsp;=&nbsp;100000;&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;vTickCount&nbsp;=&nbsp;Environment.TickCount;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;str&nbsp;=&nbsp;null;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;cycle;&nbsp;i++)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;+=&nbsp;i.ToString();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;String:&nbsp;{0}&nbsp;MSEL&#34;,&nbsp;Environment.TickCount&nbsp;-&nbsp;vTickCount);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vTickCount&nbsp;=&nbsp;Environment.TickCount;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//看到这个变量名我就生气，奇怪为什么大家都使它呢？&nbsp;：）&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuilder();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;cycle;&nbsp;i++)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(i);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;StringBuilder:&nbsp;{0}&nbsp;MSEL&#34;,&nbsp;Environment.TickCount&nbsp;-&nbsp;vTickCount);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>String:&nbsp;102047&nbsp;MSEL&nbsp;<br/>StringBuilder:&nbsp;46&nbsp;MSEL&nbsp;<br/><br/><br/>23.explicit&nbsp;和&nbsp;implicit&nbsp;的含义？&nbsp;<br/><br/>答：&nbsp;<br/><br/>explicit&nbsp;和&nbsp;implicit&nbsp;属于转换运算符，如用这两者可以让我们自定义的类型支持相互交换&nbsp;<br/><br/>explicti&nbsp;表示显式转换，如从&nbsp;A&nbsp;-&gt;&nbsp;B&nbsp;必须进行强制类型转换（B&nbsp;=&nbsp;(B)A）&nbsp;<br/><br/>implicit&nbsp;表示隐式转换，如从&nbsp;B&nbsp;-&gt;&nbsp;A&nbsp;只需直接赋值（A&nbsp;=&nbsp;B）&nbsp;<br/><br/>隐式转换可以让我们的代码看上去更漂亮、更简洁易懂，所以最好多使用&nbsp;implicit&nbsp;运算符。不过！如果对象本身在转换时会损失一些信息（如精度），那么我们只能使用&nbsp;explicit&nbsp;运算符，以便在编译期就能警告客户调用端&nbsp;<br/><br/>示例：&nbsp;&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example23&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//本例灵感来源于大话西游经典台词“神仙？妖怪？”--主要是我实在想不出什么好例子了&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Immortal&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;name;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Immortal(string&nbsp;Name)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;Name;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;implicit&nbsp;operator&nbsp;Monster(Immortal&nbsp;value)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Monster(value.name&nbsp;+&nbsp;&#34;：神仙变妖怪？偷偷下凡即可。。。&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Monster&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;name;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Monster(string&nbsp;Name)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;Name;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;explicit&nbsp;operator&nbsp;Immortal(Monster&nbsp;value)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;Immortal(value.name&nbsp;+&nbsp;&#34;：妖怪想当神仙？再去修炼五百年！&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Immortal&nbsp;tmpImmortal&nbsp;=&nbsp;new&nbsp;Immortal(&#34;紫霞仙子&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//隐式转换&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Monster&nbsp;tmpObj1&nbsp;=&nbsp;tmpImmortal;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpObj1.name);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Monster&nbsp;tmpMonster&nbsp;=&nbsp;new&nbsp;Monster(&#34;孙悟空&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显式转换&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Immortal&nbsp;tmpObj2&nbsp;=&nbsp;(Immortal)tmpMonster;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(tmpObj2.name);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>紫霞仙子：神仙变妖怪？偷偷下凡即可。。。&nbsp;<br/>孙悟空：妖怪想当神仙？再去修炼五百年！&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;<br/>24.params&nbsp;有什么用？&nbsp;<br/><br/>答：&nbsp;<br/><br/>params&nbsp;关键字在方法成员的参数列表中使用，为该方法提供了参数个数可变的能力&nbsp;<br/><br/>它在只能出现一次并且不能在其后再有参数定义，之前可以&nbsp;<br/><br/>示例：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;ConsoleApplication1&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;App&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//第一个参数必须是整型，但后面的参数个数是可变的。&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//而且由于定的是object数组，所有的数据类型都可以做为参数传入&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;UseParams(int&nbsp;id,&nbsp;params&nbsp;object[]&nbsp;list)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(id);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;list.Length;&nbsp;i++)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(list[i]);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//可变参数部分传入了三个参数，都是字符串类型&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UseParams(1,&nbsp;&#34;a&#34;,&nbsp;&#34;b&#34;,&nbsp;&#34;c&#34;);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//可变参数部分传入了四个参数，分别为字符串、整数、浮点数和双精度浮点数数组&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UseParams(2,&nbsp;&#34;d&#34;,&nbsp;100,&nbsp;33.33,&nbsp;new&nbsp;double[]&nbsp;{&nbsp;1.1,&nbsp;2.2&nbsp;});&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadLine();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>结果：&nbsp;<br/>1&nbsp;<br/>a&nbsp;<br/>b&nbsp;<br/>c&nbsp;<br/>2&nbsp;<br/>d&nbsp;<br/>100&nbsp;<br/>33.33&nbsp;<br/>System.Double[]&nbsp;&nbsp;<br/><br/><br/>25.什么是反射？&nbsp;<br/><br/>答：&nbsp;<br/><br/>反射，Reflection，通过它我们可以在运行时获得各种信息，如程序集、模块、类型、字段、属性、方法和事件&nbsp;<br/><br/>通过对类型动态实例化后，还可以对其执行操作&nbsp;<br/><br/>一般用于插件式框架程序和设计模式的实现，当然反射是一种手段可以充分发挥其能量来完成你想做的任何事情（前面好象见过一位高人用反射调用一个官方类库中未说明的函数。。。）&nbsp;<br/><br/>示例：&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example25Lib&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;Class1&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;string&nbsp;name;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;int&nbsp;age;&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果显式的声明了无参数构造函数，客户端只需要用程序集的Cr&#101;ateInstance即可实例化该类&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在此特意不实现，以便在客户调用端体现构造函数的反射实现&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//public&nbsp;Class1()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Class1(string&nbsp;Name,&nbsp;int&nbsp;Age)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;Name;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;age&nbsp;=&nbsp;Age;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;ChangeName(string&nbsp;NewName)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;=&nbsp;NewName;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;ChangeAge(int&nbsp;NewAge)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;age&nbsp;=&nbsp;NewAge;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;string&nbsp;ToString()&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;string.Format(&#34;Name:&nbsp;{0},&nbsp;Age:&nbsp;{1}&#34;,&nbsp;name,&nbsp;age);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br/>}&nbsp;<br/>反射实例化对象并调用其方法，属性和事件的反射调用略去&nbsp;<br/><br/>using&nbsp;System;&nbsp;<br/>using&nbsp;System.Collections.Generic;&nbsp;<br/>using&nbsp;System.Text;&nbsp;<br/>&nbsp;&nbsp;<br/>//注意添加该反射的命名空间&nbsp;<br/>using&nbsp;System.Reflection;&nbsp;<br/>&nbsp;&nbsp;<br/>namespace&nbsp;Example25&nbsp;<br/>{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Program&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main(string[]&nbsp;args)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//加载程序集&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assembly&nbsp;tmpAss&nbsp;=&nbsp;Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory&nbsp;+&nbsp;&#34;Example25Lib.dll&#34;);&nbsp;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//遍历程序集内所有的类型，并实例化&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type[]&nbsp;tmpTypes&nbsp;=&nbsp;tmpAss.GetTypes();&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(Type&nbsp;tmpType&nbsp;in&nbsp;tmpTypes)&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb