CLR C#学习———— 类型

看《CLR via Csharp》回顾基础,写点简单的总结博客

Object类

每个类型都是从System。Object中派生,所以每个对象都有基本的方法

公共方法

Equal:如果有相同的值,返回True,但是原始Object的Equal是同一性的,不是相等性判断,通常需要重写Equal,而且还需要重写GetHashCode方法

 GetHashCode:返回对象的哈希码。如果某个类型的对象要在哈希表集合中作为键使用,应该重写该方法。为不同对象提供良好分布

 ToString:默认返回类型的完整名称(this.GetType().FullName),经常重写返回包含对象状态表示的String对象。比如Int,Boolean,返回他们值的字符串。

GetType:返回类型对象(Type派生的一个类型的实例),指出对象的类型,返回的Type对象可以和反射配合,获取元数据信息。GetType是非虚方法,防止重写隐瞒类型破坏类型安全 

受保护方法 

MemberwiseClone:非虚方法,创建新实例,并且与this字段完全一致,返回引用

Finalize:在对象内存被实际回收前会调用该方法 ,需要注意的是~ClassName是该方法的语法糖

new操作符 

在C#中new的作用区

1.计算类型与基类中所有实例字段所需的字段数。包括额外成员——类型对象指针,同步索引块。

2.从托管堆中分配类型所需的字节数,分配的所有字节都为0

3.初始化类型对象指针和同步索引块

4.调用实例构造器

类型转换

C#想任何基类转换是隐式转换,转换为派生类只能显示因为运行时可能失败

以下是简单的代码示范

internal class Program
{
    class A { }

    static void Main(string[] args)
    {
       object obj = new A();//隐式转换
        A a = obj as A;//必须显示转换不然会报错
        Timer b = (Timer)obj;//编译器不会报错运行时报错
    }
}

C#使用is和as操作符来转换

 object o = new Employee();
 if(o is Employee)
  {
      Employee e = (Employee)o;
  }

在上述代码中C#检查了两次对象类型。先是is,后面是显示转换时。这样虽然更安全但是也跟费性能,使用as可以简化该写法

object o = new Employee();
 Employee e = o as Employee;
if (e!= null)
 {
     //其他语句
 }

使用该语句只进行了一次类型检测减少了性能消耗

运行时的相互关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值