时间: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, 两个方法不能仅根据参数是声明为ref或out 来区别。
八,方法重载(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 然后在运行期间进行正常的JIT(Just In Time)编译,获得内部可执行代码。
十 构造函数与初始化
0构造函数可以定义为private 或protected
1 C#要求所有的变量或对象在使用之前必须初始化(注意:很容易出错!)。而构造函数做的大多是做初始化的工作。C#中并不是必须为每一个类写构造函数,一般情况下,如果没有提供任何构造函数,编译器会在后台创建一个默认的构造函数。它只是把所有的成员字段初始化为标准的默认值(如 引用类型:null,数字数据类型为 0,bool 为 false)。
2 如果一个类中没有定义任何公共或受保护的构造函数,就不能使用new 方法来创建该类的实例。这在以下两种情况下是有用的:
A ,类中紧紧包括静态的成员或属性,因此永远不会实例化。
B ,希望类仅通过调用某个静态成员函数来实例化。
如:
namespace InforExchangFlat
{
public class ClassSqlDB
{
//定义静态实例
private static ClassSqlDB Instance;
//定义SqlConnection对象
public SqlConnection objConnection =new SqlConnection();
///
///静态实例初始化函数
///
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):不能修改的,但在运行之前其值是未知的,在运行过程中赋予值。只读字段有特定的赋值区域:构造函数,可以在构造函数中经过计算赋值给只读字段,只读字段可以是静态字段(一个类只有一个值),也可以是实例字段(每一个实例有自己的值)