孙展波:实现.NET无限潜力

Realize .NET Potential (中文版)
随笔 - 430, 评论 - 12203, 引用 - 54

导航

关于

贴子以"现状"提供且没有任何担保也没有授予任何权利。
计数器(2005/12/8起).点击阅读我的Blog In English

标签

每月存档

最新留言

广告

【第1页/共2页,16条】
首页
前页
1

解答:设计指导的自相矛盾之处

一周前的有奖问答的题目是自相矛盾的设计指导前后的矛盾之处在于TypeConverter类在ConvertToConvertFrom无法执行的时候抛出NotSupportedException是不符合设计指导的要求的无法Convert的情形是对于某些输入而言的。最合适的异常是在比较InvalidOperationException NotSupportedException之后我提到的“不要忘记ArgumentException及其子类

 

当然现在就只能将错就错,将TypeConverter单列出作为特例。因为不是每个程序员都充分了解和注意所有的设计指导,未来的新增加的API也未必能100%与设计指导保持一致。如果您在BetaASP.NET 2.0, WinFrom2.0, Avalon 1.0, Indigo 1.0发现使用不妥之处,请及时指出,以利于改进。

 

贴子以"现状"提供且没有任何担保也没有授予任何权利

posted on 2004-11-26 17:38:00 by zhanbos  评论(2) 阅读(2781)

认识Avalon中的VisualTree

Avalon程序员需要了解的基本概念包括Logical tree, Visual Tree, Style, Routed Event, Dependency Property, Resources等。这个Post从一个实例加深对LogicalTreeVisualTree的认识。

 

以这个Xaml文件为例:

<Window x:Class="AvalonApplication1.Window1" xmlns="http://schemas.microsoft.com/2003/xaml" xmlns:x="Definition" Text="AvalonApplication1" ID="mainWindow">

    <Grid>

        <Button Content="Click Me" Click="ButtonClick"/>

    </Grid>

</Window>

 

LogicalTree的结构被Xaml清晰的表述出来了一个Window包含了一个Grid, 而这个Grid又包含了一个Button。但是当这个window显示在屏幕上的时候,实际上使用的VisualTree是什么样的呢。

 

VisualTree的结构取决于Window,GridButtonStyle,用户可以自己订制所以决无唯一的答案。在缺省的XP下显示上面这个Xaml,VisualTree的结构如下:

 

AvalonApplication1.Window1

    System.Windows.Controls.Border

        System.Windows.Controls.Grid

            System.Windows.Documents.AdornerDecorator

                System.Windows.Controls.ContentPresenter

                    System.Windows.Controls.Grid

                        System.Windows.Controls.Button

                            System.Windows.Controls.Grid

                                System.Windows.Shapes.Rectangle

                                System.Windows.Shapes.Rectangle

                                System.Windows.Shapes.Rectangle

                                System.Windows.Shapes.Rectangle

                                System.Windows.Shapes.Rectangle

                                System.Windows.Shapes.Rectangle

                                System.Windows.Shapes.Rectangle

                                System.Windows.Shapes.Rectangle

                                System.Windows.Controls.Border

                                    System.Windows.Controls.FlowPanel

                                        System.Windows.Controls.ContentPresenter

                                            System.Windows.Controls.Text

                                System.Windows.Controls.Grid + GridLinesRenderer

                        System.Windows.Controls.Grid + GridLinesRenderer

                System.Windows.Documents.AdornerLayer

            System.Windows.Controls.Primitives.StatusBar

            System.Windows.Controls.Primitives.ResizeGrip

            System.Windows.Controls.Grid+GridLinesRenderer

 

得到此输出的代码在我的LonghornBlogs上可以看到。同时试试看你能否回答出最后提出的那个问题。

 

贴子以"现状"提供且没有任何担保也没有授予任何权利

posted on 2004-11-26 05:49:00 by zhanbos  评论(4) 阅读(3822)

搜索:一位支持微软技术的朋友 (Plus one)

微软美国community(社区)正在试点一项新的活动,对支持微软技术的朋友表示感谢(有小礼物赠送)和欢迎(邀请参加online, offline的社区活动)。我准备通过博客堂搜索到一位这样的朋友。

 

如果您:每周访问博客堂一次或者更多,人在美国,目前还不是MVP (Most Valuable Professioanl),对微软技术很感兴趣,有自己的关于微软技术的Blog或者网站或者写的文章,请回复此帖。第一位符合条件的回复将得到我的邀请。我会通过email告知您登录网站和代码。

 

更新1:有同事赞助一个邀请名额,现在可以邀请2位支持微软技术的朋友。

更新2:telestar接受了第一个邀请,尚还有一个邀请名额。

 

贴子以"现状"提供且没有任何担保也没有授予任何权利

posted on 2004-11-25 04:50:00 by zhanbos  评论(30) 阅读(4559)

define:Avalon

Google中试图寻找Avalon的解释,可以键入define:Avalon. 只是目前还没有任何关于WinFx下的Avalon的定义。

 

所以,当我在安装Avalon 11CTP的时候,我留意到其定义比较全面。如果你没有注意到的话,请参见我的同名longhornblogs. 拷贝如下:

"Avalon" is the code name for Microsoft’s unified presentation subsystem for Windows, consisting of a display engine and a managed-code framework. It unifies how Windows creates, displays, and manipulates documents, media, and user interface, and enables developers and designers to create visually-stunning, differentiated user experiences. 简言之,是新一代Windows应用程序表现层的API及服务支持.

 

我安装CTP的计算机配置很低,双CPU但是只有700M,内存256M。虽然比较,运行Avalon也是没有问题的。

 

贴子以"现状"提供且没有任何担保也没有授予任何权利

posted on 2004-11-22 10:20:00 by zhanbos  评论(2) 阅读(3469)

Avalon 11月CTP发布

MSDN订户已经可以下载Avalon November 2004 CTP Build. 这是在2003PDC之后的又一次公开版本。变化是挺大的,而且Avalon仍然在变化之中。

 

AvalonWinFx的一个重要技术,提供了新一代Windows应用程序表现层的API及服务支持。

 

新闻报导,请看Microsoft gives developers a glimpse of Avalon;技术指导,请看MSDN上的文章Avalon November 2004 Community Technical Preview。当然技术指导会经常提到WinFX SDK.

 

贴子以"现状"提供且没有任何担保也没有授予任何权利

posted on 2004-11-21 08:40:00 by zhanbos  评论(3) 阅读(4886)

有奖问答:自相矛盾的设计指导?

在题为“区分使用InvalidOperationExceptionNotSupportedException”的Blog里面我首先提到如何区分使用 InvalidOperationException NotSupportedException然后归纳了在FCL 1.x之中InvalidOperationException NotSupportedException的使用。

 

前后是不是有自相矛盾之处呢?请回答并有解释说明,第一个给出合适回答的朋友将得到Alienware Mousepad作为小纪念品。要在12月下旬才可以寄出。可能是我也可能请Grace代为发送。

 

贴子以"现状"提供且没有任何担保也没有授予任何权利

posted on 2004-11-19 13:24:00 by zhanbos  评论(15) 阅读(5054)

二字头的开始

31早安中国第一帖开始承蒙博客堂读者支持和鼓励Blog终于达到了两百篇这一数字。稍微总结以下,有意想不到的收获和结果。

 

比如说,“早安中国”这一帖已经成为众多渴望减肥人士报名和交流信息的重要平台。他们大都是从搜索引擎中找过来的,而搜索引擎更因为他们的回复认定了这种相关性。(我没有删除这些回复。虽然文不对题,但不算是Comment Spam.

 

而通过博客堂认识了众多朋友和同行,很让人欣喜。通过互相交流和切磋,希望我们都有超出原先期望的收获。

 

两百篇,忽然之间就走过,

二字头的开始,我好想说,

珍惜您和我所把握的每个瞬间,

还可以选择一次无悔的梦!

 

附:为了热烈祝贺200篇,近期的Blog将会通过有奖问答等方式为积极参与的读者提供小奖品,请踊跃参加。时间不固定,前天答对的朋友是learner.

posted on 2004-11-18 16:42:00 by zhanbos  评论(17) 阅读(4670)

区分使用InvalidOperationException和NotSupportedException

对于不同的错误情形,库函数需要选择合适的Exception的类别和Exception Message。如何区分使用 InvalidOperationException NotSupportedException呢?

 

NotSupportedException: 如果API总是会失败无论其input(如参数)的值是什么。

 

InvalidOperationException: 如果API在当前对象所处的状态(不管输入是什么)下会失败,但是当对象的状态改变时能成功。

 

当然不要忘记ArgumentException及其子类适用于API的当前参数值不合法的情形。

 

FCL 1.x之中,NotSupportedException的使用主要用以下3种情形:

 

  1. 基类对一些函数没有实现而期待其子类去实现。但是子类可能只实现部分这样的函数,而对其他不支持的函数抛出NotSupportedException.
  2. System.IO的类在试图read, seek,write并不支持此功能的stream时抛出NotSupportedException.
  3. TypeConverter类在ConvertToConvertFrom无法执行的时候抛出NotSupportedException.

 

InvalidOperationException的使用则要广泛多了。

 

FCL 2.0WinFX1.0中,我希望InvalidOperationExceptionNotSupportedException的区别能够继续体现出来。如果您在BetaASP.NET 2.0, WinFrom2.0, Avalon 1.0, Indigo 1.0发现使用不妥之处,请及时指出,以利于改进。常见的错误是在需要使用InvalidOperationException之处使用了NotSupportedException.

 

贴子以"现状"提供且没有任何担保也没有授予任何权利

posted on 2004-11-18 16:20:00 by zhanbos  评论(6) 阅读(3185)

学习本无捷径,遗忘其实重要

为了孩子的未来,父母甚至愿意放弃自己的幸福和追求,与之相比多花些钱就不算什么了。对于绝大多数的孩子来说,能够得到较好的教育对于其前途仍然是非常重要的。所以现在的家长在孩子的教育投资上是不惜血本。

 

所以商家就不会无动于衷。比如说学习英语吧,这显然已经成为一个很大的产业了。如果真的有用,赚钱并无可厚非。但是有些产品,把效果吹得天花乱坠,好像是灵丹妙药,让老师家长孩子一个个兴奋得在广告片里面赞不绝口。

 

家长说英语我是不懂的。但是不要紧没关系,我买了这样的产品,它懂。

学生说其功效显著,单词是想忘也忘不掉,流利英语更是脱口而出。

产品代言人一次次提醒观众,不买此产品,想必会毁了孩子的未来。

 

其实理智的读者都知道,一个东西如果听起来太好了感觉不会是真的话,这个东西声称的作用其实就是假的。

 

教育投资也要讲求投资的回报。只让产品厂家及其代言人获利的投资是失败的。

 

虽然在这里并没有时间展开讨论学习一门外语之有效的方法。那些经过实践和时间检验的学习方法,需要的持之以恒和不断努力,而不是突如其来横空出世的“学习利器”。

 

还有一点不得不提:如果用了某个产品,“单词是想忘也忘不掉”,那真的是大脑功能紊乱的表现。这样的“好处”,幸亏是假的。

 

遗忘是正常运作的大脑的功能。否则,大脑的运作就会如同这个充斥着虚假广告的大千世界一样杂乱。

 

以上文字,纯属个人观点。

posted on 2004-11-17 08:01:00 by zhanbos  评论(12) 阅读(5155)

有奖问答:继承了System.ValueType 的类型一定是数值类型(而不是引用类型)么?

已知一个TypeBaseTypeSystem.ValueType,请问这个Type一定是数值类型么?

 

需要有解释说明,第一个给出合适回答的朋友将得到Alienware Mousepad作为小纪念品。要在12月下旬才可以寄出。可能是我也可能请Grace代为发送。

 

贴子以"现状"提供且没有任何担保也没有授予任何权利

posted on 2004-11-16 15:14:00 by zhanbos  评论(22) 阅读(3084)

ASP.NET 2.0 Beta2改变了特殊目录的名称

基于用户反映和与ASP.NET 1.x兼容的考量,自ASP.NET2.0 Beta2开始,那些包含代码,主题(theme),资源等特殊目录将做以下的修改。左栏为Beta1的命名,即Tech Ed 2004上课程使用的名称;右栏为Beta2的命名,而且应该也是RTM时使用的名称。

 

 

/Bin

保持不变

/Bin

/Code

改变为

/app_code

/Resources

改变为

/app_globalresources

/LocalResources

改变为

/app_localresources

/WebReferences

改变为

/app_webreferences

/Data

改变为

/app_data

/Browsers

改变为

/app_browsers

/Themes

改变为

/app_themes

 

 

小结:Bin保持了和V1.x的兼容,而其他目录则有了共同的前缀。

 

贴子以"现状"提供且没有任何担保也没有授予任何权利

posted on 2004-11-16 14:25:00 by zhanbos  评论(19) 阅读(6728)

重载,重写和实现接口时保持相同参数名

如果已经定义了一个interface如下:

  public interface IExample

  {

    void ShowExampe(string example);

  }

 

有一个类是这样实现此interface

  public class DetailedExample : IExample

  {

    public void ShowExampe(string detailedInfo)

    {

      //implementation detail

    }

  }

 

有什么问题么?编译是可以通过的,但是微软的.NET设计指导要求在实现ShowExample的时候不改变参数名,所以detailedInfo应该命名为example.

 

Guideline: Do be consistent in naming parameters when overloading, overriding and implementing interfaces.  This discipline increases the developer perception of connection and interrelation between the methods.  (在重载,重写和实现接口时需要保持参数名的一致性。这一原则增加了程序员对于方法之间的联系和相互关系的理解。)

 

贴子以"现状"提供且没有任何担保也没有授予任何权利

posted on 2004-11-12 10:29:00 by zhanbos  评论(7) 阅读(3222)

Google提供的公益广告“公益”在哪里?

在博客堂主页和各其他各页来自Google的文字广告中有一类叫作Google提供的公益广告。广告问道:“西西里的首府在哪里?”,“标准的一副塔罗牌总共有多少张?”“罗马神话中拔掉狮子爪子中的刺的人是谁?”

 

如果点击链接,我就等于到Google的网站做了一个简单的搜索。所以这应该就是Google对自己的搜索引擎能够回答以上这些问题的广告了。

 

但是这样的广告如何就是公益性质的呢?很明显西西里的首府政府,使用塔罗牌为人指点迷津的人,和拔掉狮子爪子中的刺的人没有向Google付费,但是这样就可以自己标榜为公益广告的么?

 

在发布之前又看到了一则google提供的公益广告:“红血球是在哪里产生的?Google知道。点击这里来找到答案。”

 

所以我知道Google的公益广告就是强化“Google知道”各种问题的答案。而Google所不知道的,就是商业广告和公益广告的分别。

 

以上文字,纯属个人观点。

posted on 2004-11-11 14:25:00 by zhanbos  评论(13) 阅读(13117)

实现 Interface的函数总是虚函数么?

以下这段代码有编译错误:

  public interface IExample

  {

    void ShowExampe(string example);

  }

  public class DetailedExample : IExample

  {

    public void ShowExampe(string example)  //Line 7

    {

      //implementation detail

    }

  }

  public class BlogDetailedExample : DetailedExample

  {

    public override void ShowExampe(string example)   //Line 14

    {

      //My override

    }

  }

 

错误代码是CS0506: 'function1' : cannot override inherited member 'function2' because it is not marked "virtual", "abstract", or "override"。从此我们也许可以推断出第七行的ShowExample不是虚函数。实际上,它是虚函数,至少从IL代码可以看到virtual的标记:
method public hidebysig newslot virtual final instance void ShowExampe(string example) cil managed

 

但是我们注意到了final的使用,这使得此虚函数不可以再被override. 现在将第七行改成 public virtual void ShowExampe(string example) 则可以使得代码编译通过。此时其IL就和类自己定义的(而不是通过实现interface得到的)虚函数一样了:
.method public hidebysig newslot virtual instance void ShowExampe(string example) cil managed

 

当然我们也可以将类DetailedExample改成abstract(抽象)类也使得编译成功,这也和类自己定义的其他抽象函数一样。

  public abstract class DetailedExample : IExample

  {

    public abstract void ShowExampe(string example);

  }

ShowExampleIL代码如下:
.method public hidebysig newslot abstract virtual instance void ShowExampe(string example) cil managed

 

所以编译器只是对于未使用virtual或者abstractinterface函数实现做了特别的处理,使得它是虚函数,但是final的函数实现所以不可以再被override. 回答标题的问题,答案是肯定的。

 

C#之中,标记一个虚函数为final的关键字是sealed。如第十四行就可以这样写.

public sealed override void ShowExampe(string example)

 

贴子以"现状"提供且没有任何担保也没有授予任何权利

posted on 2004-11-11 13:49:00 by zhanbos  评论(16) 阅读(6497)

新闻稿已发布,网页尚待更新:beta.search.msn.com

昨天从Seattle Times的一篇报道中得知微软在这个小时会发布自己的搜索引擎。果然在整点过一分的时候其新闻稿就发布了。虽然我刷新了浏览器好多遍,看来在beta.search.msn.com上的内容还没有更新。

微软自己的搜索引擎包括以下特性:

  • Direct Answers: 直接问问题得到直接的回答
  • Direct Actions: 键入歌手,歌名或者唱片名称,得到来自msn music的链接。(这个似乎不难实现)
  • Search Builder, Search Near Me等因为没有机会试用尚不知与其他搜索引擎的类似功能比较如何。

目前能够搜索50亿网页或者文档,与今天google主页上显示的80亿有差距。当然数量只是一个方面。随着MSN搜索的不断完善,会给用户更多选择。

贴子以"现状"提供且没有任何担保也没有授予任何权利

posted on 2004-11-11 13:37:00 by zhanbos  评论(5) 阅读(2035)

【第1页/共2页,16条】
首页
前页
1

Powered by: Joycode.MVC引擎 0.5.2.0