博文
IEnumerable和IEnumerator的理解[原](2011-04-27 11:22:00)
摘要:
在现实应用中,对于集合以及枚举这些集合的需求非常普遍,
因此在.NET中集合所依赖的接口被设计为公共的。想要实现对象的枚举就必须继承IEnumerable接口。
public interface
IEnumerable
{
public IEnumerator GetEnumerator();
}
它只有一个成员:GetEnumerator方法。该方法返回一个世纪的枚举器(enumerator)对象。那么要定义一个枚举器就要必须实现IEnumrator接口:
public
interface IEnumerator
{
public Boolean MoveNext();
public
Object Current { get; }
public void Reset();
}
也就是说如果我们希望一个类型支持枚举特性,那么我们就必须还要额外定义一个辅助类型来实现IEnumerator的所有方法。这个辅助类型通常被定义为一个Nested
class声明在主类内部。这样在实现的时候我们发现,在app调用GetEnumerator()方法时,我们需要构造一个辅助类型的实例作为返回值。
看一段别人的总结,水平高的人应该理解更深吧。我先贴出来供以后参考。
1、一个Collection要支持foreach方式的遍历,必须实现IEnumerable接口(亦即,必须以某种方式返回IEnumerator
object)。
2、IEnumerator object具体实现了iterator(通过MoveNext(),Reset(),Current)。
3、从这两个接口的用词选择上,也可以看出其不同:IEnumerable是一个声明式的接口,声明实现该接口的class是“可枚举(enumerable)”的,但并没有说明如何实现枚举器(iterator);IEnumerator是一个实现式的接口,IEnumerator
object就是一个iterator。
......
世界白银储量及金银历史比价关系(2011-04-25 15:39:00)
摘要:http://www.cngold.org/baike/silver01/32440.html
http://www.cifco.com.cn/academe/train_content.shtml?id=4262
时间:2010-6-18 9:41:36 来源:中国黄金投资网 作者:陈学线
一、世界银矿山储量及分布情况
2005年世界银储量和储量基础分别为27万t和57万t,储量可保证生产28年。从世界分布情况看,波兰、中国、美国、墨西哥、秘鲁、澳大利亚、加拿大和智利等国的储量占到世界总储量和储量基础的80%,其中波兰的储量和储量基础均位居世界首位,分别为51000吨和140000吨,占到世界银储量和储量基础的18.8%和24.6%。按照05年世界银矿山产量19257.4吨计算,世界银储量和储量基础静态保证年限分别为14年和30年,说明世界白银储量的保证程度并不很高。全球约2/3的银资源是与铜、铅、锌、金等有色金属和贵金属矿床伴生的,1/3是以银为主的独立银矿床。预计未来银的储量和资源仍主要来自副产银的贱金属矿床,而银从这些矿床中的提取将主要取决于贱金属市场的需求。据《世界金属统计》2006年2月报道,2004年和2005年世界矿山银产量分别为18856.8t和19257.4 t。2005年比2004年增加了400.6t,增长2.12%; 2004年比2003年增加了256 t,增长1.38%。银矿产量多来自铅-锌矿山、铜矿山和金矿山等,作为这些矿山的共生品或副产品,2004年这些矿山提供矿山银产量的70%,而来自以银为主的独立银矿山产量只占矿山银产量的30%。
世界主要产银国有秘鲁、墨西哥、中国、澳大利亚、智利、加拿大、波兰和美国等。这八大产银国 2003年至2005年产量均在千吨以上,2005年合计占世界总产量的80%左右。秘鲁是世界上最大的银生产国,2004年和2005年的产量分别达 3059.8t和3193.1 t,占世界产量16% 和16.58%。
中国为世界第三大产银国,近年矿山银产量节节上升,1996年突破1000 t大关,达到1143.4t,2002年突破2000 t大关,2004年中国矿山银产量为2000.4t,占世界总产量11%左右, 2005年与前三年产量持平,这是国外机构的统计,而按中国有色金属工业统计资料,我国......
白银价格暴涨 还能投资吗(2011-04-25 15:36:00)
摘要:进入2011年之后,贵金属遭遇了较大幅度的价格调整,不过随着近期市场避险情绪的上升,黄金、白银的价格再度进入上升轨道。2月22日,纽约市场白银期货价格一度涨到每盎司34.31美元,创下31年来的新高,国际贵金属市场被白银搅动得异常活跃。这真金白银价格暴涨的经济现象到底是一次投资机遇?还是一个可怕的金钱陷阱呢?面对如此纷繁复杂的贵金属市场,百姓们能不能在这个白银之战中成功抢滩?3月4日21点55分《对手》栏目邀请环球财经研究院院长、《货币战争》作者宋鸿兵,财经评论员马光远以及高赛尔金银首席分析师和平安证券综合研究所首席分析师等专业人士,在演播室现场围绕“白银价格还会上涨吗?”“白银适合普通投资者投资吗?”“白银适合长期持有吗?”这三个辩题展开激烈辩论。曾经预言黄金牛市的宋鸿兵,在其新书《货币战争3》中,大胆放言:“白银将是你一生最大的一次投资机会。”是什么样的理由使得他能够如此地“口出狂言”?并且还有一些分析师认为,白银将与黄金同步进入十年牛市。然而,火爆的市场背后,是否也蕴藏着巨大的风险?我们有必要配置白银资产吗?白银具备像黄金一样的保值增值功能吗?经历了此轮价格暴涨,白银还具有投资价值吗?
推荐阅读
[热点]
金牛狂奔进入“千五”时代
黄金高位回调风险加大
黄金有望再涨 上方空间不大
银价创31年新高 涨幅赶超黄金
黄金股与金价的背离将得到修复
转变之年话黄金 站在历史新起点
各地黄金铂金饰品行情报价
二季度投资策略会火热报名中
一辩:白银价格还会上涨吗?
宋鸿兵:未来三到五年,白银价格必涨。
马光远:从银近一百年历史来看,每一年所谓银的牛市都是操作的,银价飞得越高,跌得越狠。
宋鸿兵:简单地说,白银价格上涨最主要动力来源于供求关系不平衡,我们都知道历史上金和银有一个固定的比价,就是1∶16,在中西方历史上都稳定了上千年,这种关系到了70年代、80年代被打破了,我们看到金和银的价格,到去年的时候,已经被逆转到了1∶60,严重地背离了历史上传统的价格固定比价;我们再看黄金和白银存量,1940年的时候,全世界白银全部存量是30万吨,黄金是3万吨,从1940年到2010年之后,白银从30万吨下降到只有3万吨,黄金从3万吨翻了五倍上来,现在接近16万吨,换句话说在地平面以上的白银比黄金要少得多,只......
论己土(2011-04-24 16:30:00)
摘要:戊己之土同属为土,而戊土厚重中正,己土中正蓄藏,戊土高亢,己土卑湿,此其不同之别,卑湿之土,其性柔和,能培木之根,故不愁木盛;其体端凝,水得以纳藏,故不畏水狂也;阴土能泄火晦火,故火少火晦;能润金生金,故曰金多金光,此为己土之特点,如欲滋生万物,则须丙火以去其虚湿之气,戊土助其生长之力,然后万物乃能旺盛繁茂也。
己土代表阴土,常指在大海或在水喧的湿润土壤,此土的特性是用来种花草树木,但不能太大,否则会有树翻土倾的危险。
己土由于是包融水,火,金,木之物,因此己土日干的人,包融别人的能力极强,是统筹四方力量最好的第二把手,但己土人如果做首领,便欠缺领袖风范,显得有点优柔寡断,眼光浅窄了!
己土温柔好笑,但内带疑惑,由于多笑容,不笑起来很难看,己土擅理事,但却有极强的叛逆性格。
己土与辰土及丑土相通,此土最宜生金,欠金的人一见己土人必然喜爱之极,但如果拿己土防洪,一定被洪水冲进大湖内,我曾经研究过在山泥倾泄中或者大雨中被水冲走的人的八字,大多是己土命人行大水运或金水运。
因此己土和戊土一样要丙火,癸水及甲木来配合,首二者非常重要,甲木要视乎日主土旺才可以用,热的己土(生于夏天)要用癸水来调候,冻的己土(生于冬天)要用丙火来温暖驱寒。
己土:阴土,性情含蓄,于四行无所不在,怕生是己土的一个特性,不易主动与陌生人接近,表面温和文静,擅长协调事务,重感情,抗压性强,猜疑心重,讲义气不服输,富可塑性。
己土 阴土, 田园稼穑, 茀厥丰草。先勿令官杀杂混, 更遇雨暘时, 若高溼得宜, 又春耕喜木, 夏耘喜水, 秋收喜火与金, 冬藏喜土。 数者得宜, 自然秀实, 受享富贵。 更知向阳之地, 春光先到, 益己逢丙, 无人不发。 即舒配酌取, 终能发达者, 不离丙火范围。
阮玲玉,女,民国前三年四月二十六亥时
坤:庚戌 辛巳 己亥 乙亥
大运: 庚辰 己卯
这个命造是在民国三十年代的著名的女影星,由于她发生的事情都极为轰动,幼小时,其母替她算命,当时算命师傅说:这个女人长得很漂亮,在事业上会有一番成就,但是寿命不长。这些话都一一应验。
在演艺界要出名,最主要看食伤,要名燥一时就要看官杀,食伤能够制住官杀的话,知名度就会提高
个性方面就看这个透出的庚辛金食伤星是否得令,伤官代表她的心性,这个四月刚好是庚金长生之地,等于伤官司令,......
ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第七篇(2011-04-24 08:12:00)
摘要:摘要
本文作为《ASP.NET MVC案例教程》的完结篇,仅从个人角度,发表一些对ASP.NET MVC框架的看法。并且在最后会附上本系列文章的Demo下载。
前言
写这篇文章的目的,是想总结一些东西,以帮助朋友们更好的使用这个框架。但是,我又不像把官方列举的哪些优势、功能翻译过来列举在这里。
所以,我想干脆我就纯从个人观点上对这个框架评论一下吧。说的不好的,不对的还请批评指正。^_^
ASP.NET MVC——螺旋进步的产物
对于微软为什么要推出ASP.NET MVC,我们是无从得知的,也许是因为JavaEE平台上有Struts,也许是因为MVC太流行,也许微软是想使得自己的Web App平台更完善,总之我们只能猜测。但是如果回顾一下微软的Web App平台进化过程,还是很有意思的。
ASP——微软最早为Web开发做出的贡献可能就是ASP了,这个动态语言把动态网页开发的难度空前降低了。但是,在很多人兴奋的用ASP写着一个又一个动态网页时,它的缺点渐渐暴露:语言过于简单,没有面向对象支持、没有好的IDE支持、动态脚本和静态HTML杂糅在一起,使得修改及维护极为困难。
Web Form——说实话,即使是用现在的眼光看,微软推出的Web Form编程模型确实是很有创意,也很实用。微软开创性地将桌面应用的开发模式引入Web应用开发:拖控件、写事件处理、运行...一切都那么美好,而且前段静态代码和后端程序完全隔离在两个文件里,并且用户可以使用.NET平台上任意一种语言进行后端编程。对程序员来说,使用C#进行编程比使用ASP实在是舒服太多了。所以,Web Form模型可以说成为.NET Web App开发的代名词,所有基于.NET平台的Web开发人员都熟悉并接受了这种模型。
&n......
ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第六篇(2011-04-24 08:11:00)
摘要:要
本文将对“MVC公告发布系统”的发布公告功能添加日志功能和异常处理功能,借此来讨论ASP.NET MVC中拦截器的使用方法。
一个小难题
我们继续完善“MVC公告发布系统”,这次,我们的需求是对公告发布功能添加日志记录能力,即在发布公告前,记录一次,在公告发布成功后,再记录一次。然后还要使得其具备异常处理,即当业务组件出现问题时,跳转到相应的错误页面并显示相应提示。
有人可能笑了,这有什么难的,在DoRelease这个Action的开始和结束处各加入相应日志功能不久结了。异常处理更不在话下,直接try...catch搞定。
没错,以上方法确实行得通,但是存在以下两点问题:
1.代码重复问题。很多日志处理代码和异常处理代码是很相似的,这样就导致了各个Action中存在大量重复代码。
2.职责被破坏。不要忘了,我们的Controller仅仅是控制器,它应该只负责表示逻辑,而不应该被一大堆日志处理代码和try...catch块包围。我们要的Action,应该是干净的、工整的、仅包含表示逻辑的Action。
以上两点,造成了我们系统中的坏味代码。那么,怎么解决这个问题呢?
从厨师到AOP
先来想象一个场景:饭店里的高级厨师怎么工作?我们知道,他不用洗菜切菜、不用端着盘子送菜、如果发现手里牛肉变质了他更不用拿着牛肉去找肉店老板理论,他的工作很单一:炒菜。
当原料送来后,有专门的顺菜切菜工进行洗菜、切菜,然后把处理好的菜送给厨师,厨师只管下锅炒......
ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第五篇(2011-04-24 08:02:00)
摘要:摘要
本文将从完成“输入数据验证”这个功能出发,逐渐展开ASP.NET MVC与Ajax结合的方法。首先,本文将使用ASP.NET MVC提供的同步方式完成数据验证。而后,将分别结合ASP.NET AJAX和JQuery将这个功能重构成异步形式。
数据验证
在上一篇文章中,我们完成了发布公告的功能。但是从健壮性角度看,这个功能并不完善,因为一般情况下,我们输入的数据要符合一定的约束条件,例如,在我们的例子中,我们至少不能将空字符串作为标题或内容吧。下面,我们来为程序加入数据验证功能,
ASP.NET MVC中提供了良好的数据验证实现支持,下面我们来看实现过程。首先,我们要修改一下Release.aspx视图,修改后的视图如下。
Release.aspx:
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Release.aspx.cs" Inherits="MVCDemo.Views.Announce.Release" %>
2<%@ Import Namespace="MVCDemo.Models.Entities" %>
3
4<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
// type="text/javascript">
// ]]>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"]]> >
5
6<html......
从零开始学习 ASP.NET MVC 1.0 (五) ViewEngine 深入(2011-04-23 11:29:00)
摘要:一.摘要
本文讲解ViewEngine的作用, 并且深入解析了实现ViewEngine相关的所有接口和类, 最后演示了如何开发一个自定义的ViewEngine. 本系列文章已经全部更新为ASP.NET MVC 1.0版本.希望大家多多支持!
二.承上启下
首先注意: 我会将大家在MVC之前一直使用的ASP.NET页面编程模型称作ASP.NET WebForm编程模型.
上一讲中我们已经学习了如何向View传递Model, 以及如何在View中使用Model对象. 目前为止我们使用的都还是ASP.NET WebForm的页面模型,比如aspx页面,用户控件,母版页等. 最后这些页面中都要转换为HTML代码. 比如页面中的内嵌代码:
<% = ViewData["model"] %>
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .l......
从零开始学习 ASP.NET MVC 1.0 (四) View/Model 全解(2011-04-23 11:28:00)
摘要:一.摘要
本文讲解在Action中向View传递Model的几种方式.以及View获取Model以后如何编写显示逻辑.还详细的介绍了ASP.NET MVC框架提供的Html Helper类的使用及如何为Html Helper类添加自定义扩展方法.
二.承上启下
上一篇文章中我们学习了Controller处理一次请求的全过程.在Controller的Action中, 会传递数据给View,还会通知View对象开始显示.所以Model是在Action中获取的, 并由Action传递给View. View对象接到Action通知后会使用自己的显示逻辑展示页面.
下面首先让我们学习如何将Model传递给View对象.
三.传递数据给View
在MVC中,Model对象是指包含了数据的模型. Controller将Model传递给View以后, View对象中不应该做任何的业务逻辑处理, 仅仅根据Model对象做一些显示逻辑的处理.
传递Model对象时, 我们有两种选择:
1.传递一个弱类型的集合, 即成员为object类型的集合, 在View中需要将每个成员转换成我们需要的类型,比如int, string,自定义类型等.
2.传递强类型对象, 这些类型是我们自定义的. 在View中直接使用我们传递的强类型对象, 不需要再转换类型.
如果让我们自己设计一个MVC框架, 我们也会想到上面两种实现方式,接下来看看在ASP.NET MVC中的实现.
1.传递弱类型的集合
(1) 如何传递
ASP.NET MVC框架定义了ViewContext类, 直译后是"View上下文", 其中保存和View有关的所有数据, 其中Model对象也封装在了此类型中.
ViewContext对象包含三个属性:
IView View
ViewDataDictionary ViewData
TempDataDictionary TempData
其中ViewData集合和TempData集合都是用来保存Model对象的.在一个Controller的Action中, 我们可以用如下方式为这两个集合赋值:
/// <summary> /// 传递弱类型Model的Action示例 ......
从零开始学习 ASP.NET MVC 1.0 (三) Controller/Ac(2011-04-23 11:27:00)
摘要:一.摘要
一个Url请求经过了Routing处理后会调用Controller的Action方法. 中间的过程是怎样的? Action方法中返回ActionResult对象后,如何到达View的? 本文将讲解Controller的基本用法, 深入分析Controller的运行机制, 并且提供了创建所有类型Action的代码. 值得学习ASP.NET MVC时参考.
二.承上启下
在上一篇文章中, 我已经学会了如何使用Routing获取Controller和Action, 随后的程序会调用Controller中的Action方法.
每个Action方法都要返回一个ActionResult对象. 一个Action会将数据传递给View,如图:
三.Controller与Action的作用
1.职责
Controller负责将获取Model数据并将Model传递给View对象.通知View对象显示.
2.ASP.NET MVC中的Controller和Action
在ASP.NET MVC中, 一个Controller可以包含多个Action. 每一个Action都是一个方法, 返回一个ActionResult实例.
ActionResult类包括ExecuteResult方法, 当ActionResult对象返回后会执行此方法.
下面分层次的总结Controller 处理流程:
1. 页面处理流程
发送请求 –> UrlRoutingModule捕获请求 –> MvcRouteHandler.GetHttpHandler() –> MvcHandler.ProcessRequest()
2.MvcHandler.ProcessRequest() 处理流程:
使用工厂方法获取具体的Controller –> Controller.Execute() –> 释放Controller对象
3.Controller.Execute() 处理流程
获取Action –> 调用Action方法获取返回的ActionResult –> 调用ActionResult.ExecuteResult() 方法
4.ActionResult.ExecuteResult() 处理流程
获取IVie......