现在的位置: 首页 > 综合 > 正文

《C#高级编程(第四版)》—读书笔记(1)

2012年10月16日 ⁄ 综合 ⁄ 共 3198字 ⁄ 字号 评论关闭
小弟刚也是刚开始学习c#以及.net ,写过一些代码。感觉基础还是很重要的,所有想认真地学习一遍 《C#高级编程(第四版)》。本着吃透的态度,我会对自己不怎么确定的地方和感觉容易出错的地方,做一些demo 来验证。肯定会有些自己理解错误的地方,请各位提出,一起进步。(文章中的代码都是在vs2005中调试通过的。)

时间:2008-2-25

内容:第二章 c#基础(23~99

一、c#中定义的任何的变量(值类型和引用类型)必须先初始化再使用,不然编译出错。

二、注意引用类型 string 的特殊性:虽让string是引用类型,但是如果对一个string实例做修改,那么会创建一个新的string实例,这一点与其他的引用类型是不同的。

三、XML文档说明:C#有根据特定的注释自动创建XML格式的文档说明的功能,用三斜杠(""")表示

时间:2008-2-26

内容:第三章对象和类型(100~116

 

五,类中的常量成员不能声明为static ,是不是常量成员默认的都是static 的?常量成员是属于类的数据,还是属于类的实例---对象的数据?

常量成员是属于类的数据,因为一个类中声明了一个常量,那么在初始化之后它是不可变的,它是一个类中共用的。类似于static型的成员。

六,方法参数传递的三种方法:

1,值传递

2,引用传递 ref ,传得是引用,可以对该参数修改

3,输出传递,out ,主要是实现输出的问题(返回多个参数)。

C# 在方法参数传递的要求:在传递给方法之前,无论是按值传递或是按引用传递,都必须初始化变量(而在方法中对值传参数的任何修改都不会带出到方法外,在方法中对ref 参数作的修改被带到方法外影响实参,但是这样的修改可以发生也可以不发生)。而按OUT传递,传递给方法的变量可以不初始化。但是在该方法中必须对OUT参数赋值(即使在传给方法之前OUT参数已经初始化,也必须做此操作)。

七,方法重载(overload)?

1, 并没有overload关键字,方法重载是有参数的个数,以及参数的类型来区别的。

2, 两个方法不能仅在返回类型上有区别。

3, 两个方法不能仅根据参数是声明为refout 来区别。

八,方法重载(overload)与方法覆写(override)的区别

1, 作用的不同:方法重载(overload)是为同一类中的一种方法提供几种可能的实现方法;而方法覆写(override存在于继承类中,为了实现与父类同一方法的不同实现。

2, 实现方式不同:没有overload 关键字,是通过参数列表来区别不同的方法的

重载Overload特点(两必须一可以)
public bool withdraw(double amt, string name)
public double withdraw(double amt)
1、方法名必须相同
2、参数列表必须不相同
3、返回值类型可以不相同

使用关键字:override
覆写Override特点(三相同)
public override bool withdraw(...)
1、方法名相同
2、参数列表相同
3、返回值类型相同

   .net程序编译执行过程

              1 编写程序

              2 调试,编译通过,.net代码会编译为MSIL(MS Intermediate Language)

        3 然后在运行期间进行正常的JITJust In Time编译,获得内部可执行代码。
   构造函数与初始化

            0构造函数可以定义为private protected

1 C#要求所有的变量或对象在使用之前必须初始化(注意:很容易出错!)。而构造函数做的大多是做初始化的工作。C#中并不是必须为每一个类写构造函数,一般情况下,如果没有提供任何构造函数,编译器会在后台创建一个默认的构造函数。它只是把所有的成员字段初始化为标准的默认值(如 引用类型:null,数字数据类型为 0bool false)。

2 如果一个类中没有定义任何公共或受保护的构造函数,就不能使用new 方法来创建该类的实例。这在以下两种情况下是有用的:

    A ,类中紧紧包括静态的成员或属性,因此永远不会实例化。

 B ,希望类仅通过调用某个静态成员函数来实例化。

如:

namespace InforExchangFlat

{

    public class ClassSqlDB

    {

        //定义静态实例

        private static ClassSqlDB Instance;

        //定义SqlConnection对象

        public SqlConnection objConnection =new SqlConnection();

        ///<summary>

        ///静态实例初始化函数

        ///</summary>

        static public ClassSqlDB GetInstance()

        {

            if (Instance == null)

            {

                Instance = new ClassSqlDB();

            }

            return Instance;

}

}

}

十一特殊的构造函数

       1 静态构造函数:

C#的一个新特征是可以给类编写无参数的静态构造函数,这种构造函数只执行一次(通常在第一次调用类的成员之前执行)。而一般的构造函数只要创建类的对象就会执行。主要作用:初始化类中静态字段和属性。静态构造函数没有访问修饰符。

如:

using System;

using System.Drawing;

namespace DHCC.Changjia

{

    public class UserPreferences

    {

        public static readonly Color BackColor;

        static UserPreferences()

        {

            DateTime now = DateTime.Now;

            if (now.DayOfWeek == DayOfWeek.Saturday

                || now.DayOfWeek == DayOfWeek.Sunday)

                BackColor = Color.Green;

            else

                BackColor = Color.Red;

        }

        private UserPreferences()

        {

        }

}

}

      2 从其他构造函数中调用构造函数

        一个类有多个构造函数,每一个构造函数都要对一些字段初始化。所有会存在一定量的重复代码,可以把这些重复代码写到一个构造函数中。

如:

    Class Car

{

    Private string description;

    Private uint nWheels;

    Public Car(string model,uint nWheels)

{

    This.description=model;

    This.nWheels=nWheels;

}

Public Car(string model):this(model,4)

{

}

}

十二常量与只读字段的区别

    常量(const):已知的,不能修改的值。Const都是静态的,但不能使用static修饰。

只读字段(readonly):不能修改的,但在运行之前其值是未知的,在运行过程中赋予值。只读字段有特定的赋值区域:构造函数,可以在构造函数中经过计算赋值给只读字段,只读字段可以是静态字段(一个类只有一个值),也可以是实例字段(每一个实例有自己的值)

抱歉!评论已关闭.