RSS 2.0 Feed
初学者园地 | Beginners' Roundtable
摘要:问:在.NET框架函数库中, 是否每一个KeyDown事件都有保证一个对应的KeyUp事件? 答:不是,因为WinForm底层的Windows 32 Messages WM_KEYDOWN和WM_KEYUP并不能保证这一点,而WinForm所作的就是将其转化为对应的事件。 这一回答也适用于WPF中的对应事件。...[阅读全文]

posted @ | Feedback (12) | Filed Under [ WPF/SilverLight WinForm FCL | 库函数 初学者园地 | Beginners' Roundtable ]

摘要:以下这段代码有编译错误:   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  ......[阅读全文]

posted @ | Feedback (16) | Filed Under [ C# 初学者园地 | Beginners' Roundtable ]

摘要:问:前日在某论坛看到关于".NET Runtime"被译为".NET 运行时",但在《C#技术内幕》中文版以及MSDN中文站里的某些文章里看到的却是".NET 运行库",我想搞清楚"运行库"准确还是"运行时"准确,或者两者用哪一个来表达更合理;第二个名词是关于".NET Framework"一直以来我只知道它被称作是".NET 构架(框架,这两个我不知道哪一个更准确)",我想搞清楚在开发中构架与框架是否有区别,如果有,区别在什么地方?是否".NET Framework"也可以译作".NET 运行库"。   答:.NET Runtime应该翻译为.NET运行时;.NET Framework的官方翻译是.NET框架。汉语翻译为“构架”的英语单词可能是Architecture或者Schema.   .NET框架主要包括了.NET运行时和.NET框架类库(Framework Class Library,有时缩写为FCL如我的这个Blog的一个分类就是FCL | 库函数)。NET运行时包含Type (类型) System, Metadata (元数据) System和Executon(执行) System.;Execution System提供的服务包括Loading, JIT, Versioning, security, GC等。FCL包括了实现Console, WinForm, WebForm, ADO.NET等众多功能的库函数。   TechEd的讲座(Visual C# 2005语言和集成开发环境增强)前半部分的内容涉及到.NET运行时和.NET框架类库,后半部分内容侧重于VS2005的功能增强。VS2005并不是.NET框架的一部分,而是一个很出色的使用.NET开发的工具。   贴子以"现状"提供且没有任何担保也没有授予任何权利  ...[阅读全文]

posted @ | Feedback (178) | Filed Under [ FCL | 库函数 初学者园地 | Beginners' Roundtable Tech•Ed ]

摘要:问一:关于下面两段同样效果但是有什么区别呢? 它们都可以返回和设置name: One Class: public class Class1Name{    private string name;    public string GetName(){return name;}    public void SetName(string name){this.name=name; }}  The Other Class:public class Class2Name{    private string name;    public string Name    {        get{return name;}        set{name=value;}    }} 回答: 有以下几个要点: 第一个Class包含2个Method方法/function函数;第二个Class包含一个property属性,确切的说是可读可写的property. 在本质上2者是非常相似的。对可读可写的property 而言,在.NET内部实现上也是2个函数。 但是在概念上,和对class 的设计上,method和property 是不同的。 从设计的角度看,例子中的name是适合作为property 的。一般认为property 常为名词,表示class的一些特性;method 常为动词,表示 class 能够发生的action. 从设计的角度看,另外一个考虑是:property的读写不应该是比较复杂/昂贵的操作;否则的话,考虑使用method. VS.NET对property和method的不同处理表现在:Tooltip会自动求出property的值。 问二: “property的读写不应该是比较复杂/昂贵的操作;否则的话,考虑使用method.”不好理解,可以详细点解释点吗? 回答:这些都是从usability的角度考虑。大多数人认为property的读写都是很快的操作。如果不是这样,好的设计就要求使用method。如果当你的Class的name 改变时,发生的不是简单的赋值操作,而是一个复杂的数据库的query和update。这种情况下,使用UpdateName这样的method就能够比一个property setter表达好很多。这些都是class designer需要考虑的。 贴子以"现状"提供且没有任何担保也没有授予任何权利。...[阅读全文]

posted @ | Feedback (145) | Filed Under [ 初学者园地 | Beginners' Roundtable ]