<?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>days of linnchord &#187; CShap</title>
	<atom:link href="http://linnchord.net/archives/tag/cshap/feed" rel="self" type="application/rss+xml" />
	<link>http://linnchord.net</link>
	<description>南台静坐 : : :</description>
	<lastBuildDate>Thu, 03 Nov 2011 02:22:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>CSS设计器之样式表操作类</title>
		<link>http://linnchord.net/archives/131.html</link>
		<comments>http://linnchord.net/archives/131.html#comments</comments>
		<pubDate>Mon, 26 Apr 2004 16:20:00 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[CShap]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[netsoft]]></category>

		<guid isPermaLink="false">http://linnchord.net/2004/04/css%e8%ae%be%e8%ae%a1%e5%99%a8%e4%b9%8b%e6%a0%b7%e5%bc%8f%e8%a1%a8%e6%93%8d%e4%bd%9c%e7%b1%bb/</guid>
		<description><![CDATA[为了操作样式表，设计了一个简单的样式表操作类。功能主要是解析操作指定样式表文件，实现对样式类的添加、修改、删除、保存。 机制：读取Web服务器上某样式表文件,将文本转化为一个ArrayList，数组元素为自定义的ClassItem对象,包含Name和Text属性（Name即样式名称，Text即样式的内容）；然后通过对ArrayList操作，控制样式，最后保存。 由于在服务器段我们不作具体样式定义，因此该类只操作到样式类级别，不涉及样式属性和值。 下面提供该类的UML图 ClassItem 是一个结构体，仅包含两个属性；]]></description>
			<content:encoded><![CDATA[<p>为了操作样式表，设计了一个简单的样式表操作类。功能主要是解析操作指定样式表文件，实现对样式类的添加、修改、删除、保存。 </p>
<p>机制：读取Web服务器上某样式表文件,将文本转化为一个ArrayList，数组元素为自定义的ClassItem对象,包含Name和Text属性（Name即样式名称，Text即样式的内容）；然后通过对ArrayList操作，控制样式，最后保存。 </p>
<p>由于在服务器段我们不作具体样式定义，因此该类只操作到样式类级别，不涉及样式属性和值。 </p>
<p>下面提供该类的UML图 ClassItem 是一个结构体，仅包含两个属性； </p>
<p><img src="http://linnchord.net/upload/x2blog/img/CssControlClass.gif" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/131.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS设计器之流程</title>
		<link>http://linnchord.net/archives/132.html</link>
		<comments>http://linnchord.net/archives/132.html#comments</comments>
		<pubDate>Fri, 23 Apr 2004 17:11:00 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[CShap]]></category>
		<category><![CDATA[netsoft]]></category>

		<guid isPermaLink="false">http://linnchord.net/2004/04/css%e8%ae%be%e8%ae%a1%e5%99%a8%e4%b9%8b%e6%b5%81%e7%a8%8b/</guid>
		<description><![CDATA[最近做了一个CSS设计器，主要功能是在web界面上操作设计CSS样式表，目的是方便用户自定义系统界面。 其实我个人看法这个东西并没有太大必要，对于最终用户来说，一般不熟悉网页制作，是不可能进行这种操作的，而且就系统整体来考虑，也不应该给用户这种权限。另外，相对于本来就比较紧张时间资源来讲，花这么多时间，实现这种用户需求优先度较低的功能，实在不合算&#8230;&#8230; 奈何项目经理雄心勃勃，在大而全的方针指导下，不得不做啊。 月初就作的差不多，来总结一下吧 流程再简单说明一下]]></description>
			<content:encoded><![CDATA[<p>最近做了一个CSS设计器，主要功能是在web界面上操作设计CSS样式表，目的是方便用户自定义系统界面。 </p>
<p>其实我个人看法这个东西并没有太大必要，对于最终用户来说，一般不熟悉网页制作，是不可能进行这种操作的，而且就系统整体来考虑，也不应该给用户这种权限。另外，相对于本来就比较紧张时间资源来讲，花这么多时间，实现这种用户需求优先度较低的功能，实在不合算&hellip;&hellip; </p>
<p>奈何项目经理雄心勃勃，在大而全的方针指导下，不得不做啊。 </p>
<p>月初就作的差不多，来总结一下吧 </p>
<p><img src="http://linnchord.net/upload/x2blog/img/cssflow.gif" alt="" /> </p>
<p>流程再简单说明一下 </p>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/132.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#的四个基本技巧</title>
		<link>http://linnchord.net/archives/133.html</link>
		<comments>http://linnchord.net/archives/133.html#comments</comments>
		<pubDate>Thu, 22 Apr 2004 10:10:00 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[CShap]]></category>

		<guid isPermaLink="false">http://linnchord.net/2004/04/c%e7%9a%84%e5%9b%9b%e4%b8%aa%e5%9f%ba%e6%9c%ac%e6%8a%80%e5%b7%a7/</guid>
		<description><![CDATA[1．如果可能尽量使用接口来编程 .NET框架包括类和接口，在编写程序的时候，你可能知道正在用.NET的哪个类。然而，在这种情况下如果你用.NET支持的接口而不是它的类来编程时，代码会变得更加稳定、可用性会更高。请分析下面的代码： private void LoadList (object [] items, ListBox l) { 　for (int i = 0; i < items.Length;i++) 　　l.Items.Add (items[i].ToString ()); } 这个函数从一个可为任何对象的数组中加载ListBox，这段代码被限定为只能使用数组。假想过些时候你发现那些对象存在数据库中，或别的集合中。那么你需要修改程序来使用不同的集合类型。如果你用ICollection接口来写那段程序，你就不用修改那段程序了，对于任何实现 ICollection接口的类型它都能很好的工作: private void LoadList (ICollection items,ListBox l) { 　　foreach (object o in items) 　　l.Items.Add (o.ToString ()); } ICollection被数组和所有System.Collection中的集合实现。此外，多维数组也支持ICollection接口。如果那还不够的话，数据库.NET类同样支持ICollection接口。用接口写的这个函数不用需改就可以才许多中情况下使用。 2. 使用属性代替原始数据 因为属性已经成为语言本身的元素，所以声明数据元素时它的作用域等级没有必要大于private。因为代码本身会把属性看成数据元素，你并没有失去使用简单数据类型的便利性 。相反它会使你的代码更加灵活功能更加强大。属性使你的数据元素封装性更好。属性可以让你使用lazy evaluation来返回数据。lazy evaluation的意思是当用户请求时才计算它的值，而不是一直保留着它。 最后，属性可以是virtual也可以是abstract。你也可以在接口中定义属性。 这里还有维护方面的因素应当注意：尽管操作两者的方法是一样的，但是你把一个数据元素变成属性，那么原先客户端的程序便不能访问服务端的新版本程序了。实际上对于在Web service中你想实现序列化的值你可以把它们变成属性来使用： private int TheMonth = [...]]]></description>
			<content:encoded><![CDATA[<p><font face="Courier New">1．如果可能尽量使用接口来编程 </p>
<p>.NET框架包括类和接口，在编写程序的时候，你可能知道正在用.NET的哪个类。然而，在这种情况下如果你用.NET支持的接口而不是它的类来编程时，代码会变得更加稳定、可用性会更高。请分析下面的代码： </p>
<p>private void LoadList (object [] items, ListBox l) <br />{ <br />　for (int i = 0; i < items.Length;i++) <br />　　l.Items.Add (items[i].ToString ()); <br />} </p>
<p>这个函数从一个可为任何对象的数组中加载ListBox，这段代码被限定为只能使用数组。假想过些时候你发现那些对象存在数据库中，或别的集合中。那么你需要修改程序来使用不同的集合类型。如果你用ICollection接口来写那段程序，你就不用修改那段程序了，对于任何实现 ICollection接口的类型它都能很好的工作: </p>
<p>private void LoadList (ICollection items,ListBox l) <br />{ <br />　　foreach (object o in items) <br />　　l.Items.Add (o.ToString ()); <br />} </p>
<p>ICollection被数组和所有System.Collection中的集合实现。此外，多维数组也支持ICollection接口。如果那还不够的话，数据库.NET类同样支持ICollection接口。用接口写的这个函数不用需改就可以才许多中情况下使用。 </p>
<p>2. 使用属性代替原始数据 </p>
<p>因为属性已经成为语言本身的元素，所以声明数据元素时它的作用域等级没有必要大于private。因为代码本身会把属性看成数据元素，你并没有失去使用简单数据类型的便利性 。相反它会使你的代码更加灵活功能更加强大。属性使你的数据元素封装性更好。属性可以让你使用lazy evaluation来返回数据。lazy evaluation的意思是当用户请求时才计算它的值，而不是一直保留着它。 </p>
<p>最后，属性可以是virtual也可以是abstract。你也可以在接口中定义属性。 </p>
<p>这里还有维护方面的因素应当注意：尽管操作两者的方法是一样的，但是你把一个数据元素变成属性，那么原先客户端的程序便不能访问服务端的新版本程序了。实际上对于在Web service中你想实现序列化的值你可以把它们变成属性来使用： </p>
<p>private int TheMonth = 0; </p>
<p>[XmlAttribute ("Month")] <br />public int Month <br />{ <br />　get { <br />　　return TheMonth; <br />　} <br />　set { <br />　　TheMonth = value; <br />　} <br />} </p>
<p>简单通过属性就可以使你的所有数据元素私有化。 </p>
<p>3. 在Producer/Consumer 的Idiom中使用Delegate </p>
<p>当你生成一个实现producer idiom类的时候，使用deletate来通知consumer。这种方法相对于用接口更加灵活。Delegate是多点传送的，所以不用加额外的代码你就何以支持多用户。相对于用接口这样做可使类之间的耦合性降低。 </p>
<p>下面的类处理键盘输入并把它传给所有的registered listeners： </p>
<p>public class KeyboardProcessor <br />{ <br />private OnGetLine theFunc = null; </p>
<p>public OnGetLine OnGetLineCallback { <br />　get { <br />　　return theFunc; <br />　} <br />　set { <br />　　theFunc = value; <br />　} <br />} </p>
<p>public void Run (){ <br />// Read input. <br />// If there is any listeners, publish: <br />string s; <br />do { <br />　s = Console.ReadLine (); <br />　if (s.Length == 0) <br />　　break; <br />　if (theFunc != null){ <br />　　System.Delegate [] funcs =theFunc.GetInvocationList(); <br />　　foreach (OnGetLine f in funcs) { <br />　　　try { <br />　　　　f (s); <br />　　　} catch (Exception e) { <br />　　　　Console.WriteLine <br />　　　　(“Caught Exception: {0}”, e.Message); <br />　　　} <br />　　} <br />　} <br />} while (true); <br />} </p>
<p>任何数目的listeners都可注册到producer，它们所要做的只是提供一个特定的函数：deletate。 </p>
<p>4. 注意初始化顺序 </p>
<p>C#中对于一些变量声明加入了initializer的概念。它们在构造函数之前被执行，实际上变量在基类的构造函数执行前之前被初始化。 </p>
<p>所以，在初始化变量的时候不要用基类中的数据，因为它们还没有被构造。</font></p>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/133.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

