C#进阶学习第五天

1.单例模式

1.构造函数私有,不能通过私有构造函数创建对象,只能通过getinstance()方法得到同一个对象
2.因为每次获取到的对象都是同一个对象,不会出现两个不同的对象,所以称为单例模式

private static Person pp;
public static Person getPerson()
    {     if(pp ==null)
          { pp = new Person ("li", 23);  }
		  return pp;
	 }

2.索引器

1.定义类似于属性,也有get{} set{} 方法
2. 通过索引器,首先数组可以声明为私有,然后访问数组的元素也不用先访问类在访问数组的元素
3. 可以直接通过索引器方便的调用数组元素

public class Student
 {  private int []aa;
    public Student(int index)
	{ aa= new int[index] ; }
	 public int this[int i]
	{ get{return  aa[i];} set{aa[i]=value;}}
 }

3.结构体和类详解

1.结构体是值类型,当结构变量赋值给另一个结构变量,并且数据较大的时候,这种复制带来较大开销
2.结构类型可以有实例构造函数,静态构造函数, 不能有析构函数!
3.结构体中不带参的构造函数会一直存在,不会因为自定义带参构造函数就消失,但类相反。
结构体中不能自己定义无参构造函数,但类相反
4.结构体初始化: 赋值之后才能使用数据成员的值和函数
在声明时,调用构造函数赋值 student t =new student(“li”,22);
声明后, 对所有成员都一一赋值 studenti t2; t2.name=“li”; t2.age=22;
5.结构体类型不能赋值为空, 引用类型如类 可以赋值为null
6.结构体调用静态构造函数的时机:
@ 第一次创建对象时 (调用默认的构造函数不触发)
@第一次调用静态成员之前 (非静态成员不触发)
@第一次调用方法

         数据类型                   结构                            类
 是否必须使用new运算符           值类型                           引用类型         
 是否可声明无参构造函数          否                                 是
 数据声明时就初始化             否(const static 可以)               是
 实例化在栈还是堆分配内存        栈                            堆,栈中保存引用
 该类型能否赋值为null           否                                  是
 可否定义私有无参构造函数        否                                  是
 是否总有一个默认的无参构造函数   是                                 否

7.使用场合
1.堆栈空间有限,且需要大量的逻辑对象时,类好一些
2.对于点颜色等轻量级对象,结构好一些
3.表现抽象和多级别的对象层次,类好一些,因为结构不支持继承

猜你喜欢

转载自blog.csdn.net/JingDuiTell/article/details/88734177