<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>思维 &#187; 类</title>
	<atom:link href="http://blog.acmind.com/archives/tag/%e7%b1%bb/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.acmind.com</link>
	<description>Acme of Mind</description>
	<lastBuildDate>Mon, 19 Apr 2010 02:23:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>C#类和接口、虚方法和抽象方法及值类型和引用类型的区别</title>
		<link>http://blog.acmind.com/archives/339</link>
		<comments>http://blog.acmind.com/archives/339#comments</comments>
		<pubDate>Wed, 27 May 2009 04:09:33 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[引用]]></category>
		<category><![CDATA[值]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[虚方法]]></category>
		<category><![CDATA[抽象]]></category>
		<category><![CDATA[接口]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=339</guid>
		<description><![CDATA[1.C#类和接口的区别   解答：    接口是负责功能的定义，项目中通过接口来规范类，操作类以及抽象类的概念！    而类是负责功能的具体实现！    在类中也有抽象类的定义，抽象类与接口的区别在于：    抽象类是一个不完全的类，类里面有抽象的方法，属性，也可以有具体的方法和属性，需要进一步的专业化。    但接口是一个行为的规范，里面的所有东西都是抽象的！    一个类只可以继承一个基类也就是父类，但可以实现多个接口    PS： 接口除了规范一个行为之外，在具体项目中的实际作用也是十分重要的，在面向对象的设计原则以及设计模式的使用中，无不体现作为一个接口的使用好处，最直接 的就是设计原则中OCP（开放封闭原则），我们使用接口，而不需要关心他的具体实现，具体实现的细节变化也无关客户端（使用接口的类）的使用，对与扩展是 开放的，我们可以另写一个接口的实现来扩展当前程序，而不影响上层的使用，但对修改是封闭的，即我们不能够再去修改接口的定义，当然这个“不能够”是指在 规范原则上不应该这么做！
2.抽象类和接口的区别    解答：    抽象类（abstract class）可以包含功能定义和实现，接口（interface）只能包含功能定义    抽象类是从一系列相关对象中抽象出来的概念， 因此反映的是事物的内部共性；接口是为了满足外部调用而定义的一个功能约定， 因此反映的是事物的外部特性    分析对象，提炼内部共性形成抽象类，用以表示对象本质，即“是什么” [...]]]></description>
			<content:encoded><![CDATA[<p>1.C#类和接口的区别   <br />解答：    <br />接口是负责功能的定义，项目中通过接口来规范类，操作类以及抽象类的概念！    <br />而类是负责功能的具体实现！    <br />在类中也有抽象类的定义，抽象类与接口的区别在于：    <br />抽象类是一个不完全的类，类里面有抽象的方法，属性，也可以有具体的方法和属性，需要进一步的专业化。    <br />但接口是一个行为的规范，里面的所有东西都是抽象的！    <br />一个类只可以继承一个基类也就是父类，但可以实现多个接口    <br />PS： 接口除了规范一个行为之外，在具体项目中的实际作用也是十分重要的，在面向对象的设计原则以及设计模式的使用中，无不体现作为一个接口的使用好处，最直接 的就是设计原则中OCP（开放封闭原则），我们使用接口，而不需要关心他的具体实现，具体实现的细节变化也无关客户端（使用接口的类）的使用，对与扩展是 开放的，我们可以另写一个接口的实现来扩展当前程序，而不影响上层的使用，但对修改是封闭的，即我们不能够再去修改接口的定义，当然这个“不能够”是指在 规范原则上不应该这么做！</p>
<p>2.抽象类和接口的区别    <br />解答：    <br />抽象类（abstract class）可以包含功能定义和实现，接口（interface）只能包含功能定义    <br />抽象类是从一系列相关对象中抽象出来的概念， 因此反映的是事物的内部共性；接口是为了满足外部调用而定义的一个功能约定， 因此反映的是事物的外部特性    <br />分析对象，提炼内部共性形成抽象类，用以表示对象本质，即“是什么”     <br />为外部提供调用或功能需要扩充时优先使用接口</p>
<p>3. C#语言中，值类型和引用类型有何不同     <br />解答：    <br />值类型和引用类型的区别在于，值类型的变量直接存放实际的数据，而引用类型的变量存放的则是数据的地址，即对象的引用。    <br />值类型变量直接把变量的值保存在堆栈中，引用类型的变量把实际数据的地址保存在堆栈中，而实际数据则保存在堆中。注意，堆和堆栈是两个不同的概念，在内存中的存储位置也不相同，堆一般用于存储可变长度的数据，如字符串类型;而堆栈则用于存储固定长度的数据，如整型类型的数据int(每个int变量占用四 个字节)。由数据存储的位置可以得知，当把一个值变量赋给另一个值变量时，会在堆栈中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量，则会在 堆栈中保存对同一个堆位置的两个引用，即在堆栈中保存的是同一个堆的地址。在进行数据操作时，对于值类型，由于每个变量都有自己的值，因此对一个变量的操 作不会影响到其它变量;对于引用类型的变量，对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作，如果两个引用类型的变量引用同一个对象，实际 含义就是它们在堆栈中保存的堆的地址相同，因此对一个变量的操作就会影响到引用同一个对象的另一个变量。</p>
<p>4.结构和类的区别    <br />解答：    <br />1) 结构是一个值类型，保存在栈上，而类是一个引用类型，保存在受管制的堆上。    <br />2) 对结构中的数据进行操作比对类或对象中的数据进行操作速度要快。    <br />3) 一般用结构存储多种类型的数据，当创建一个很多类或对象共用的小型对象时，使用结构效率更高。</p>
<p>4.抽象方法和虚方法的区别    <br />解答：    <br />抽象方法    <br />使用abstract关键字 public abstract bool Withdraw(…);     <br />抽象方法是必须被派生类覆写的方法。    <br />抽象方法是可以看成是没有实现体的虚方法    <br />如果类中包含抽象方法，那么类就必须定义为抽象类，不论是否还包含其它一般方法    <br />虚方法    <br />使用virtual关键字 public virtual bool Withdraw(…);     <br />调用虚方法，运行时将确定调用对象是什么类的实例，并调用适当的覆写的方法。    <br />虚方法可以有实现体    <br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;     <br />虚拟方法和抽象方法有什么区别？    <br />抽象方法只有声明没有实现，需要在子类中实现；虚拟方法有声明和实现，并且可以在子类中覆盖，也可以不覆盖使用父类的默认实现    <br />虚拟方法有实现代码    <br />抽象方法则没有，    <br />并且抽象类不能被实例化，只能实例化实现了全部抽象方法的派生类    <br />抽象方法是虚拟方法的一种    <br />抽象方法没有实现，它的存在只是为派生类统一接口；派生类应该实现这个方法    <br />如果编写一个基类，它永远不会被实现，那么就应该将这个类中的一个或多个方法定义为    <br />抽象方法。    <br />抽象方法只有声明没有实现，需要在子类中实现；虚拟方法有声明和实现，并且可以在子类中覆盖，也可以不覆盖使用父类的默认实现    <br />补充一点    <br />只允许在抽象类中使用抽象方法声明    <br />学习    <br />其实大家首先要搞清楚，虚方法与多态性关系密切，虚方法允许派生类完全或部分重写该类的方法，需写方法体。抽象类中可以包含抽象方法与一般的方法，抽象类不 可以new,抽象方法只是一个定义，没有方法体，也就是没有{}，也不要在里面写内容。它们两个相像的一点是都用override重写</p>
<p>&#160;</p>
<p>摘自：<a title="http://www.zxbc.cn/html/20090419/70325.html" href="http://www.zxbc.cn/html/20090419/70325.html">http://www.zxbc.cn/html/20090419/70325.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/339/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UML类图图示及代码对应</title>
		<link>http://blog.acmind.com/archives/60</link>
		<comments>http://blog.acmind.com/archives/60#comments</comments>
		<pubDate>Fri, 16 Jan 2009 16:47:51 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[架构分析]]></category>
		<category><![CDATA[对照]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[类图]]></category>
		<category><![CDATA[设计技巧]]></category>
		<category><![CDATA[设计模式]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[模式]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=60</guid>
		<description><![CDATA[UML类图图示样例

代码对应：

interface IFly
{
    void Fly();
}
 
interface ILanguage
{
    void Speak();
}
 
class WideGoose : IFly
{

}
 
class Penguin : Bird
{
    private Climate climate;
}
 
class WideGooseAggregate
{
    private WideGoose[] arrayWideGoose;
}
 
class Bird
{
    private Wing wing;
    public Bird()
    {
   [...]]]></description>
			<content:encoded><![CDATA[<p><b>UML</b><b>类图图示样例</b></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/clip-image001.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image001" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="500" alt="clip_image001" src="http://blog.acmind.com/wp-content/uploads/2009/01/clip-image001-thumb.jpg" width="564" border="0" /></a></p>
<p><b>代码对应：</b></p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/clip-image002.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="153" alt="clip_image002" src="http://blog.acmind.com/wp-content/uploads/2009/01/clip-image002-thumb.jpg" width="226" border="0" /></a></p>
<pre class="mycode"><span style="color: #0000ff">interface</span> IFly
{
    <span style="color: #0000ff">void</span> Fly();
}</pre>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image4.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="113" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb4.png" width="123" border="0" /></a> </p>
<pre class="mycode"><span style="color: #0000ff">interface</span> ILanguage
{
    <span style="color: #0000ff">void</span> Speak();
}</pre>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image5.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="178" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb5.png" width="214" border="0" /></a> </p>
<pre class="mycode"><span style="color: #0000ff">class</span> WideGoose : IFly
{

}</pre>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image6.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="137" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb6.png" width="295" border="0" /></a> </p>
<pre class="mycode"><span style="color: #0000ff">class</span> Penguin : Bird
{
    <span style="color: #0000ff">private</span> Climate climate;
}</pre>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image7.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="151" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb7.png" width="263" border="0" /></a> </p>
<pre class="mycode"><span style="color: #0000ff">class</span> WideGooseAggregate
{
    <span style="color: #0000ff">private</span> WideGoose[] arrayWideGoose;
}</pre>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image8.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="153" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb8.png" width="282" border="0" /></a> </p>
<pre class="mycode"><span style="color: #0000ff">class</span> Bird
{
    <span style="color: #0000ff">private</span> Wing wing;
    <span style="color: #0000ff">public</span> Bird()
    {
        wing = <span style="color: #0000ff">new</span> Wing();
    }
}</pre>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image9.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="202" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb9.png" width="376" border="0" /></a> </p>
<pre class="mycode"><span style="color: #0000ff">abstract</span> <span style="color: #0000ff">class</span> Animal
{
    <span style="color: #0000ff">public</span> Metabolism(Oxygen oxygen,Water water)
    {

    }
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/60/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

