Chris Jiang的学习笔记

Take your passion and make it happen
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

【Professional C# 读书笔记】(一)-----C#语言基础

Posted on 2010-09-01 23:21  Chrisplus  阅读(142)  评论(0编辑  收藏  举报

说起c#就不能不提.net,可是你知道,二者并没有根本上的联系(有些过,但可以明确的是c#不是.NET的一部分)-----虽然c#是专门为.NET而设计的……然而,当二者配合使用的时候,就会有这样的效果:有一些特性是语言特性,c#语言支持的,有一些特性是平台特性,.NET支持的,所以,想使用c#高效的开发,部署,理解framework是必要的。

    第一章是.NET体系结构的总体概述,很多地方还不能理解的透彻,估计没什么大碍,在以后慢慢琢磨,可以预见的是,几乎每向下进行一布,就要回头看看第一章那个的相关内容,予以总过……

    因为有过一些cpp,java 的编程经历,看到cs的代码觉得陌生,很多东西是一样的……但是有一些方面值得注意

    1,相异值类型和引用类型

        二者的存储方式不同,前者是存储在栈中,后者是存储在托管堆中,而且是一个原值的引用。对于预定义的数据类型来讲:除了string,object之外都是值类型,而他们是引用类型。

    但是有一点值得注意:作为ref的string:

view plaincopy to clipboardprint?string s1 = "Hello World";   string s2= s1 ;    s1 = "Something else";      string s1 = "Hello World";
    string s2= s1 ;
    s1 = "Something else";

    此时的输出结果:s1 = something else  ; s2 = Hello World

    因为在修改一个字符串的时候,会创建一个全新的string,这其中的实现机制,我觉得应该是string的封装类的符号重载“=”

    哦对了,c#对于数据的初始化非常严格……

    object类,最终父类,其强大的作用,知道一点java的都懂的……

    2,关于注释

        平时不太关注的,这里因为有一个XML文档说明,觉得这样的一个解决方式非常的聪明,后面的思想很值得借鉴,codes are just codes,根据我们解析法那个是的不同,便会有不同……

    3,编程约定

        私用有成员使用camel形式,公有与保护使用Pascal形式

    4,类成员

        数据成员:字段,常量,事件。这里,事件是我现在还不能理解的,但是大体的意思的“客户可以包含所谓的事件处理程序的代码来响应该事件”-------这是不是和SQL中的trigger有一个作用,如果是那样的就好理解了……待验证。

        函数成员:

        方法,无需解释

        属性,没有VB经验的表示属性是一个多余的东西,我可以把它理解为一个对于访问器与设置器偷工减料的书写方式么?我一开始以为可能这样使用属性的话,可以把其自动列为内联函数,但是我错了,.net的内联机制的自动的(大多数情况下?),好了,既然如此,当我更熟悉CPP/JAVA的时候,我没有理由不放弃她……

            还有关于out的使用,这对与有目的性的值类型做输出变量是有意义的,我估计其实现机制是强制的转化ref型……而后面的重载规则中:两方法不能根据参数的ref和out 来区分 ---这也支持我的推断

        构造函数:因为严格的初始化控制,在没有自定义constructor的时候,会有一个默认的,无参数constructor,把值类型设为0,引用类型设为null,这其中的实现机制我感觉是,最终父类object继承造成的。一个很不错的东西。

                关于初始化列表,cs中,确实用类似的使用,但是,只允许对其他构造函数的调用,……(那么,封装类呢?)

            静态构造函数,对字段中static进行初始化,但是我们不知道什么时候会初始化,只是告诉你会在这个类使用之前,.net中有很多不确定性,这样的话,如果考试就没得出题了?……

        终结器:自动的析构

        operator:

        索引器:还不懂,&

    5,关于readonly字段

        我觉得如果用一句说的话,应该是:可以在构造函数中给他赋值,之后的行为与const一直……

    6,扩展方法:

        是一个非常非常非常有用的东西,虽然以前没有用过,但是,这个一定非常非常非常有用:

view plaincopy to clipboardprint?
public static class Extension  
{  
    public static void AddMethod(this Money monney, int number)  
     {  
          money.number += number;  
   }  

public static class Extension
{
    public static void AddMethod(this Money monney, int number)
     {
          money.number += number;
   }
}

书写的时候,注意是静态,但是调用的时候,实例方式调用,扩展方法不会覆盖同名方法。

第一篇over

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chrisplus_jiang/archive/2010/07/14/5734181.aspx