值类型和引用类型
值类型:基本数据类型 结构 枚举
值类型在堆栈空间中分配内存,在进行参数传递时考贝堆栈空间中的内容,所以不会互相影响
引用类型: 类,接口,数组
引用类型在托管堆中分配内存,在堆栈中放的是指向托管堆中首地址的一个指针,这个指针会指向托管堆中的实例,在参数传递的时候拷贝的是堆栈空间中的地址,所以会互相影响
特殊的引用类型: string
StringBuilder
StringBuilder builder = new StringBuilder("aaa");
//初始化一个字符串
builder.Append("bb");
//给前面的追加
string s = String.Format("insert into {0} {1} {2}", "xx", "cc", "ww");
double decimal
float
int
short char
byte
第四章
virtual override 父类的引用指向子类的实例
值类型:基本数据类型 结构 枚举
值类型在堆栈空间中分配内存,在进行参数传递时考贝堆栈空间中的内容,所以不会互相影响
引用类型: 类,接口,数组
引用类型在托管堆中分配内存,在堆栈中放的是指向托管堆中首地址的一个指针,这个指针会指向托管堆中的实例,在参数传递的时候拷贝的是堆栈空间中的地址,所以会互相影响
特殊的引用类型: string
StringBuilder
StringBuilder builder = new StringBuilder("aaa");
//初始化一个字符串
builder.Append("bb");
//给前面的追加
string s = String.Format("insert into {0} {1} {2}", "xx", "cc", "ww");
以上两种方式都可以在多次的字符串拼接的时候节省内存
装箱和拆箱
子类和父类之间的转换
子类向父类转换是隐式转换
父类向子类转换必须作强制转换
子类和父类之间的转换
子类向父类转换是隐式转换
父类向子类转换必须作强制转换
类型转换
double decimal
float
int
short char
byte
DateTime begin = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=;database=pubs");
conn.Open();
conn.Close();
for (int i = 0; i < 10000; i++)
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=;database=pubs");
conn.Open();
conn.Close();
}
DateTime end = DateTime.Now;
TimeSpan sp = end - begin;
Console.WriteLine(sp.Seconds); //秒时间差
Console.WriteLine(sp.Milliseconds); //毫秒时间差
DateTime end = DateTime.Now;
TimeSpan sp = end - begin;
Console.WriteLine(sp.Seconds); //秒时间差
Console.WriteLine(sp.Milliseconds); //毫秒时间差
第四章
//类和对象 构造方法和析构方法 访问修饰符 方法重载
class A
{}
A a=new A();
{}
A a=new A();
构造方法特点:和类同名,没有返回类型,没有返回值,不能显示调用,在一个类中可以有多个构造方法的重载.也可以没有显示申明的构造方法
1.构造方法可以有多种访问修饰符
2.静态的构造方法:
静态构造方法必然被调用,而且只调用一次
2.静态的构造方法:
静态构造方法必然被调用,而且只调用一次
方法重载 通过不同的参数列表来区分同名的方法,不包括返回类型
访问修饰符 public
internal
proteced 只有当前类和派生类中能够进行访问
private
封装
继承 扩展 抽象
多态
internal
proteced 只有当前类和派生类中能够进行访问
private
封装
继承 扩展 抽象
多态
继承 构造的时候从祖先开始构造
析构的时候从子类开始析构
方法的隐藏和方法的重写
析构的时候从子类开始析构
方法的隐藏和方法的重写
virtual override 父类的引用指向子类的实例