摘要: Q1: 类中的实例构造函数可否被继承?A1: 实例构造函数永远不能被继承。Q2: 抽象类可否包含有参实例构造函数,如果可以,何时会被调用?A2: 可以。抽象类有参构造函数通过其子实体类的构造函数调用,且若该抽象类没有提供无参构造函数,其子实体类必须显式调用一个它的有参构造函数,否则编译器会报错。代码如下:View Code 1 abstract class AbstractClass 2 { 3 public int Id { get; set; } 4 public AbstractClass(int id) 5 { 6 ...阅读全文
posted @ 2013-04-30 14:33 Allen Li 阅读(894) 评论(1) 编辑
摘要: Q1: const和readonly的区别是什么?A1: const: const用来声明常量。1)它的值必须在编译时确定;2)编译器将常量的值保存在程序集的元数据中;3)常量的值直接嵌入代码,运行时不需要为常量分配内存空间;4)长两宗被视为静态成员;5)用const声明的类型必须是基元类型; readonly: 用来声明只读字段。1)只读字段只能在一个构造函数中写入;2)可以用反射来修改readonly字段;3)当只读字段为引用类型,不可改变的是引用,并非字段引用的对象。Q2: 静态字段和实例字段内存空间在什么时候分配?A2: 静态字段的内存空间在类型对象中分配,类型对象是在类型加载到一个A阅读全文
posted @ 2013-04-11 21:23 Allen Li 阅读(1051) 评论(6) 编辑
摘要: Q1:类型中可以定义哪些成员?A1:1)常量;2)字段;3)实例构造函数;4)静态构造函数;5)方法;6)属性;7)事件;8)类型;9)操作符重载;10)转换操作符重载。Q2:什么是友元程序集,如何创建友元程序集,它的劣势是什么?A2:程序集A中定义的类型希望程序集B访问,又不希望其他程序集访问,即不能定义为internal或public,此时,可以用友元程序集解决。在构建程序集时,可以使用在System.Runtime.CompilerServices命名空间中定义的一个名为InternalsVisibleTo的特性来标明它认为是“友元”的其他程序集,测试一下:1)创建一个ClassLibr阅读全文
posted @ 2013-04-08 23:55 Allen Li 阅读(940) 评论(2) 编辑
摘要: Q1: 一个值类型调用System.Object类定义的方法会不会发生装箱?A1: 如果值类型重写了System.Object定义的虚方法(Equals, GetHashCode, ToString),调用时不会发生装箱,如果重写的方法中调用了基类的实现,则需要进行装箱;如果值类型调用了非虚方法(GetType, MemberwiseClone),则会发生装箱。Q2: 为什么重写Equals方法需要同时重写GetHashCode方法?A2: GetHashCode方法可以获取任意对象的Int32哈希码,System.Collections.HashTable类型,System.Generic.阅读全文
posted @ 2013-04-04 15:36 Allen Li 阅读(864) 评论(2) 编辑
摘要: Q1: 什么是基元类型?C#中有哪些基元类型?A1: 编译器能直接支持的数据类型称为基元类型,基元类型直接映射到FCL中存在的类型,比如C#中int映射到System.Int32类型。C#中的基元类型:我们可以定义这样定义一个字符串:String str = "abc";也可以这样定义一个字符串:string str = "abc";它们生成的IL是完全相同的,string可以被C#编译器直接映射到FCL中的System.String类型,换言之,C#编译器自动假定所有的源代码中都添加了这个命令:using string = System.String;阅读全文
posted @ 2013-04-02 23:38 Allen Li 阅读(1133) 评论(15) 编辑
摘要: 什么是AppBar?AppBar可以用来显示导航,命令等,可以放在页面的顶部或底部,默认情况下AppBar是隐藏的,用户可以通过鼠标右键,Win+z或用手指从屏幕顶端或底端划过来显示或隐藏AppBar.这是Windows应用商店顶端的AppBar,顶端AppBar通常用来做导航:这是Windows8自带应用 “人脉” 底端的AppBar,底端AppBar通常用来显示命令按钮:下面创建一个简单的拥有AppBar的应用,打开VS2012,FILE -> New -> Project -> Windows Store -> Blank App(XAML) -> 命名项目阅读全文
posted @ 2013-04-02 17:31 Allen Li 阅读(1005) 评论(1) 编辑
摘要: Q1: Object类型包含哪些方法?A1: Object类型共包含6个方法,Equals, GetHashCode, ToString, GetType, MemberwiseClone和Finalize.Q2: new一个对象的过程是什么?A2: 1)计算对象所需字节数,包括该类型及其基类型定义的所有实例字段所需的字节数和类型对象指针、同步块索引所需字节数,类型指针和同步块索引是CLR用来管理对象的;2)在托管堆上分配该对象所需内存空间;3)初始化类型对象指针和同步块索引;4)执行构造函数。大多数编译器都在构造函数中自动生成一段代码调用基类构造函数,每个类型的构造函数在执行时都会初始化该类阅读全文
posted @ 2013-04-01 23:04 Allen Li 阅读(1121) 评论(8) 编辑
摘要: Q1: 什么事CLR?A1: CLR (Common Language Runtime) 是一个可以由多种编程语言使用的“运行时”。Q2: CLR的核心功能有哪些?A2: 1)内存管理;2)程序集加载;3)安全性;4)异常处理;5)线程同步Q3: CLR与使用的编程语言有关吗?A3: 无关。只要编译器是面向CLR的就行。Q4: 选用不同编程语言经过面向CLR的编译器编译后生成的结果相同吗?A4: 相同。无论选择什么语言,相应的编译器变异的结果都是一个托管模块,即一个标准的32位PE (Portable Executable) 32文件或64位PE32+文件。它们都需要CLR才能执行。Q5: 托阅读全文
posted @ 2013-03-27 17:22 Allen Li 阅读(1348) 评论(4) 编辑
摘要: 本篇主要介绍下Win8应用中常用到的一些控件。TextBlock这是最简单也是最常用的控件,用来呈现文本,在此不做过多介绍。见代码:1 <!--用来呈现文本-->2 <TextBlock Name="TestTextBlock" Text="Windows Store app development"/>TextBox用于文本输入,支持单行, 多行输入, 同时结合win8系统支持触控的特性,提供了软键盘的优化属性。见代码:1 <!--单行输入框-->2 <TextBox Name="SingleLine阅读全文
posted @ 2013-03-26 18:27 Allen Li 阅读(994) 评论(0) 编辑
摘要: 我们可以用XAML来绘制Windows8应用的UI, 关于XAML语言,不在此详述,google之,bing之,莫度娘之。。。- -# 控件大概可分为布局控件,数据绑定控件以及常规控件。本篇只介绍布局控件,常规控件将在下一篇介绍,数据绑定控件会在以后的数据绑定篇介绍。布局控件GridGrid类似于HTML中的table, 可自定义m行n列,见如下代码: 1 <Grid> 2 <Grid.RowDefinitions> 3 <RowDefinition Height="*"/> 4 <RowDefini...阅读全文
posted @ 2013-03-25 14:22 Allen Li 阅读(1054) 评论(2) 编辑
摘要: 做Windows Store App开发也有一段时间了,看了一些书,一些文档,一些国外大牛博客,每天在MSDN和Stack Overflow泡着,也算对Windows Store App开发多少有了些了解,想要写一个系列,对之前学到用到的知识进行回顾和总结。Windows Store App可以使用C#,VB,Javascript和C++进行开发,我们可以选择自己熟悉的语言,本系列将采用C#. 首先从创建第一个Windows Store 应用开始,如何打开VS新建项目这种步骤在此就省略了,请确保你的操作系统是Windows8操作系统,开发环境是VS2012. VS2012一共提供了三种W...阅读全文
posted @ 2013-03-23 17:06 Allen Li 阅读(1436) 评论(4) 编辑
摘要: 参考资料《C#与.NET4高级编程设计(第五版)》MSDN主要内容new关键字对象的代垃圾回收过程强制垃圾回收Finalize与Dispsose方法using语法new关键字new关键字返回的是一个指向堆上对象的引用,并非对象本身,该引用存储在栈内。new一个对象的过程:对象的代垃圾回收时,CLR并不会检测托管堆上的每一个对象,这样会花费大量时间。为了优化检测过程,堆上的每一个对象都属于“某代":第0代:从没被标记为回收的新分配的对象第1代:上一次垃圾回收被标记为可回收但没有被回收的对象第2代:在一次以上的垃圾回收后没有被回收的对象代的设计思路是:对象在内存中存在的时间越长,他就更可阅读全文
posted @ 2013-01-03 20:03 Allen Li 阅读(1679) 评论(4) 编辑
摘要: 简介:1. One Level 1: public enum Position { C, PF, SF, SG, PG }; 2: 3: public class Player 4: { 5: public string Name { get; set; } 6: public int Number { get; set; } 7: public Position PositionInTeam { get; set; } 8: public ImageSource Imag...阅读全文
posted @ 2012-12-19 18:13 Allen Li 阅读(2093) 评论(2) 编辑
摘要: 最终效果:除了第一个Conferences,其余的Western, Pacific和Lakers都会随前面的ListBox选择的变化而变化。在选定一名球员后,下方会显示该球员球衣号码和位置。程序所用到的类: 1: public class Conference 2: { 3: public Conference() 4: { 5: Divisions = new List<Division>(); 6: } 7: public string Name { g...阅读全文
posted @ 2012-12-14 15:35 Allen Li 阅读(1114) 评论(8) 编辑
摘要: 在Code-First中,默认生成的数据库表的名称为类型的复数形式,如Model名为“Player”,默认生成的数据库表名为“Players”。很多情况下我们并不想生成的数据库表名为复数形式,如何来控制呢? 当我们想要自定义一些生成数据库表的规则的时候,会重写OnModelCreating方法,控制表明的单复数形式同样可以在这个方法中完成,代码如下:View Code 1 protected override void OnModelCreating(DbModelBuilder modelBuilder)2 {3 modelBuilder.Conv...阅读全文
posted @ 2012-07-01 19:10 Allen Li 阅读(825) 评论(0) 编辑
摘要: 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 BreakAwayEntities context = new BreakAwayEntities(); 6 var query = from r in context.Reservations join p in context.Payments on r.ReservationID equals p.ReservationID select new { r.Customer, p.R...阅读全文
posted @ 2012-05-18 10:54 Allen Li 阅读(1678) 评论(2) 编辑
摘要: 在Entity Framework中,有时我们想要得到真正的数据库表的名称,可以通过Metadata来得到。直接上代码:View Code 1 static void Main(string[] args) 2 { 3 using (BreakAwayEntities context = new BreakAwayEntities()) 4 { 5 var metadata = context.MetadataWorkspace; 6 var tables = me...阅读全文
posted @ 2012-04-25 17:25 Allen Li 阅读(1176) 评论(8) 编辑
摘要: 将一个实体映射到多张数据库表,我们只能用Fluent API来做,Data Annotation无法满足要求,我们来看一下代码:View Code 1 class People 2 { 3 public int Id { get; set; } 4 public string Name { get; set; } 5 public DateTime Birth { get; set; } 6 public bool Sex { get; set; } 7 public string Description...阅读全文
posted @ 2012-04-05 16:55 Allen Li 阅读(1058) 评论(1) 编辑
摘要: 要将多个实体映射到一个数据库表必须要满足两个条件:两个实体必须是一对一关系;两个实体共享一个主键。 下面我们直接用代码来说明:View Code 1 [Table("People")] 2 class Person 3 { 4 public int Id { get; set; } 5 public string Name { get; set; } 6 public bool Sex { get; set; } 7 public PersonDetail detail { get; set; } 8 ...阅读全文
posted @ 2012-04-05 16:19 Allen Li 阅读(1067) 评论(5) 编辑
摘要: 在前面两回我们分别分析了Lazy Loading和Explicit Loading,这一回我们来分析一下Eager Loading。在某些情况下,我们可能事先知道要需要加载某些实体的相关实体,这时我们就可以用Include方法来在加载实体的查询语句中把相关实体也一并查询出来。下面我们还用前两回使用的数据库来写一个例子来分析一下Eager Loading:View Code 1 using (var context = new TestEntities()) 2 { 3 var players = from p in context.Pl...阅读全文
posted @ 2012-03-23 16:38 Allen Li 阅读(1455) 评论(4) 编辑