【无标题】可空类型与析构函数

可空类型细节:
 可空类型可以让值类型的变量设置成null。

 值类型默认不能直接设置成null。
 要想把值类型设置成null,必须借助可空类型。

  int x = 0;
  string str = "";
  // 以上的这些操作,GC都不会回收,GC只会回收两种类型的数据:null和游离的

  int? z = null; // Nullable<T> T是未知类型,是可空类型的泛型写法。可以简写成?这样可以将值类型设为空
  double? y = 10; 也可设为其他值

long x1 = 100L;
long? x2 = null; 
x2 = x1;  可以为空赋值
// ??空接合运算符。可以用来替换if...else...判断,也可以替换三元运算符,语法比他们都优雅。
// x2为null时,使用??后面的值,不为null时,使用x2的值。
Console.WriteLine(x2 ?? 0); 使用??访问

 x1 = x2; // 报错

析构函数的特征:
析构函数只能存在于类中,而不能存在于结构中;
析构函数不能有任何修饰符,包括访问控制修饰符,静态修饰符,抽象修饰符,虚拟修饰符等都不能有;
析构函数没有参数,这就意味着不能有任何重载。
析构函数又称终结器,定义格式:~类名{}

析构函数的调用时机:
析构函数会在对象被垃圾收集器回收时调用,但垃圾收集器有个特点,它是懒惰的,它并不会在变量出了作用域和生命期后立即回收,而是在它认为适当的时候才回收,一般是内存紧张的时候。

可以使用:GC.Collect()强制调用垃圾回收器。

 ~Stuent()
 {
     Console.WriteLine("析构函数一般用来回收不再使用的实例。");
     Console.WriteLine("垃圾回收器GC会自动调用析构函数。");
     Console.WriteLine("开发者一般不建议定义析构函数,默认就有。");
     Console.WriteLine("开发者一般不建议调用析构函数,GC进行回收时,GC自动调用。");
 }

析构的调用,一般不推荐调用会自动调用

  Stuent s = new Stuent(1, "王五");
  s = null; // 明确告诉垃圾回收器,s不再使用了,你可以回收。
  Stuent s2 = new Stuent(2, "赵六"); // 非游离状态的数据
  new Stuent(3, "孙七"); // 游离状态的数据。
  // s2还在使用,不为null,不让垃圾回器去回收s2。SuppressFinalize()告诉垃圾回收器不回收。
  //GC.SuppressFinalize(s2);
  // 一般不建议强制执行GC。GC一般回收为null的变量或游离状态的数据。
  //GC.Collect(); // 强制回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值