摘要:
要学的东西很多,而我们的精力总是有限。你是否也有这样的感慨呢? 学这个没有用,公司项目中用不到。你是否也有这样的心态呢?这两种理由本身没有太大影响,甚至有时候还能帮你做判断。但是你是否把这两个作为借口来拒绝所有新东西呢? 我们要建立起自己的知识体系(知识树),凡是有助于强化或者丰富这个知识体系的,都是有用的。企业级开发受领域影响使用的技术方案总是有限,这是必须要掌握的部分,而你的知识体系要包含但是不限于此。一, 如何建立自己的知识树 1,知识树的建立是一个循序渐进的过程,或者说是了解自己的过程。 2,当自己判断能力有限的时候,可以从一本编程基础书开始,比如C#图解教程;当这个掌握之... 阅读全文
摘要:
属性看起来像字段,但本质上是方法。使用属性保持了较好的数据封装,它使类型的数据字段不会被公开,从而确保了对象的状态永远不被破坏。一,定义属性 代码如下:public sealed class Employee { //私有字段(支持字段) private string name; private int age; public string Name { get//get访问器 { return name; } ... 阅读全文
摘要:
默认情况下,CLR假定所有方法参数都是传值的。 对于引用类型,对一个对象的引用(指向对象的一个指针)会传给方法,但是这个引用本身是以传值的方式传给方法的。方法能修改对象,调用者能看到这些修改。 对于值类型,传给方法的是实例的一个副本。方法获得的是一个值类型实例副本,所以调用者中的实例不受影响。 代码如下:namespace refDemo2{ class Program { static void Main(string[] args) { int i = 5; AddI(i); ... 阅读全文
摘要:
由于最近在项目中有一个需求需要用到字符串的拆分,然后将拆分后的元素逐个加到一个listview控件中。代码如下:namespace InitalTest{ class Program { static void Main(string[] args) { string s = "1+2+3+4+5+6"; //问题1:Split方法第一个参数是一个string[]对象,为什么有些方法当参数为string的时候不用new运算符呢? string[] sArrs = s.Split(new... 阅读全文
摘要:
一,实例构造器(构造函数) 实例构造器是允许将类型的实例初始化为良好状态的一种特殊方法,它在类的每个新实例创建的时候执行。 代码如下:namespace ConstructorDemo1{ internal sealed class MyClass//字义类 { DateTime TimeOfInstantiation;//声明字段 public MyClass()//构造函数 { TimeOfInstantiation = DateTime.Now;//初始化字段 } } class P... 阅读全文
摘要:
一,类的可见性 类有两种可见性。 1,public,对所有程序集中的代码可见。 2,internal,仅对定义它的程序集中的代码可见,对其它程序集中的代码不可见。 注:如果没有显式声明类的可见性,C#编译器默认设置为internal。二,类的成员的可访问性 类的成员共有六种可访问性,这里总结了最常用的三种可访问性修饰符,它们的限制性从上到下,限制性由最大到最小排列。 1,private,只能由定义它的类型中的方法访问。 2,protected,与private相同,除了它允许它的派生类中的方法访问。 3,public,没有访问限制。 注:如果没有显式声明成员的可访问性,C#编... 阅读全文
摘要:
值类型是比引用类型更"轻型"的一种类型,因为它们不作为对象在托管堆中分配,不会被垃圾回收,也不通过指针来引用。但在许多情况下,都需要获取对值类型的一个实例引用。为了将一个值类型转换成一个引用类型,要使用一个名为装箱(boxing)的机制。一,装箱 装箱即将一个值类型转换成一个引用类型,下面是总结对值类型的一个实例进行装箱时内部发生的事情: 1,在托管堆中分配内存。内存量是值类型的各个字段需要的内存量加上托管堆的所有对象都有的两个额外成员(类型对象指针和同步块索引)需要的内存量。 2,将值类型的字段复制到新分配的堆内存。 3,返回对象的地址(或称指针)。现在,这个地址是对一个 阅读全文
摘要:
下面是FCL中值类型和引用类型的区别,用表格总结如下:值类型引用类型内存分配线程栈托管堆垃圾回收不考虑考虑表示形式未装箱和已装箱总是已装箱是否可以作为基类不能作为基类,不能有虚方法可以作为基类,也能有虚方法初始化的值0Null复制逐字段复制(深拷贝)只复制内存地址(浅拷贝)操作时影响只影响当前对象,不会影响另一个对象这个引用所对应的所有对象 下面是一个实际的例子详细说明了值类型和引用类型在内存中的布局,代码如下: namespace ValueTypeDemo1{ //值类型 struct SomeVal { public int x; } ... 阅读全文
摘要:
一,对象创建的原理 CLR要求所有的对象都用new操作符来创建,如下代码:namespace NewobjectDemo1{ class Employee { private string Name; //构造函数 public Employee(string name) { Name = name; } } class Program { static void Main(string[] args) { Employe... 阅读全文
摘要:
CLR(Common Language Runtime,公共语言运行时)是.NET Framework框架中最核心的内容,所谓CLR的执行模型,简单地讲就是解释在.NET平台下代码是如何编译和运行的。用一幅图概括如下:下面是各个阶段的工作。1,将源代码编译成托管模块 Microsoft已创建了针对各个语言的编译器,编译时编译器会去分析源代码和检查代码的语法,如果没有问题则能顺利通过编译,最终生成一个托管模块(managed module),托管模块由四部分组成,如下图所示。 1> PE32文件头:如果使用PE32格式,表明文件在windows的32位和64位版本都能运行,如果使用PE3. 阅读全文
摘要:
命名空间System.Collections.Generic中有两个非常重要,而且常用的泛型集合类,它们分别是Dictionary<TKey,TValue>字典和List<T>列表。Dictionary字典通常用于保存键/值对的数据,而List列表通中用于保存可通过索引访问的对象的强类型列表。下面来总结一下,用代码来演示怎么初始化,增加,修改,删除和遍历元素。Dictionary<TKey,TValue>字典 代码如下:namespace DictionaryDemo1{ class Program { static void Main(string[] a 阅读全文
摘要:
前面已经提到了,要想在程序多次运行间保存数据就必须使用独立存储。任何安装在Windows Phone 7中的程序都可以访问自身的永久磁盘存储区域,这个区域称为独立存储。下面这个项目,将轻击的总数作为临时数据,也就是作为页面状态的一部分。将背景颜色作为应用程序设置被所有实例共享。 MainPage.xaml XAML代码:<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Grid.RowDefinitions> <RowDefinit 阅读全文
摘要:
上一个项目实现的功能是如何从源页面传递数据到目标页面,但是,当回到源页面时,如何才能返回数据,实现数据共享呢?这个就是这一篇文章要解决的问题,而且解决这个问题有几个方案,总结如下。这里共享的数据是页面背景颜色。方案一:使用App类来存储共享数据 MainPage.xaml XAML代码:<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <TextBlock Text="Navigate to Second Page!" Hor 阅读全文
摘要:
这一篇文章要解决的问题是如何从源页面传递数据到目标页面。其实Windows Phone已经为我们提供了一套解决方案,那就是查询字符串。 下面这个项目要实现的效果是:当从MainPage页面导航到SecondPage时,该项目为SecondPage提供了MainPage当前的背景色,而且SecondPage也把自己初始化成这种颜色。这里传递的数据是背景颜色值。 MainPage.xaml XAML代码:<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> & 阅读全文
摘要:
一个稍微复杂一点的应用中,可能会用到多个页面,要在这些页面中跳转,就必须用到导航功能。 下面这个实例实现的功能是:从主页面MainPage导航到页面SecondPage,然后再从SecondPage返回到MainPage页面这样一个基本功能。 MainPage XAML代码:<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <TextBlock Text="Navigate to Second Page!" Horizonta 阅读全文