NET CLR via C#读书笔记 - 第四章 类型基础

NET CLR via C#读书笔记 - 第四章 类型基础

类型基础

1.1 Object类型

知识点1 :
所有类型都由System.Object派生。
由于所有的的类最终由System.Object派生,所有类都具有以下一组最基本方法:
公共方法(public)说明
Equals【虚方法】两个对象具有相同值时,返回true
GetHashCode【虚方法】返回对象值的哈希码。
ToString【虚方法】默认返回类型的完整名称(this.GetType().FullName)
GetType【非虚方法】返回对象类型,无法重写,避免破坏类型安全性
受保护方法(protected)说明
MemberwiseClone【非虚方法】创建类型的新实例,并将新实例的实例字段设与this对象的实例字段完全一致
Finalize【虚方法】类似于C++中析构函数,调用时机再垃圾回收器判断对象应该作为垃圾被回收之后,在对象内存实际被收回之前。主要作用是执行必要的清理工作 。
知识点2:
所有对象由new操作符创建。
TestObject T = new TestObject("This is a Test");
此处简单描述下new操作符所做工作:
①  计算类型以及所有基类型所需的字节数(包括类型对象指针和同步块索引)。
②  根据计算好的字节数为对象实例分配内存,并初始化为0。
③  初始化对象的类型对象指针和同步块索引
④  调用实例构造器 ,传递new调用中指定的参数,构造器只初始化自身类型的实例字段,基类字段由基类构造器调用(一般调用基类构造器的代码都由编译器自动生成),System.Object的构造器不做任何工作,简单返回 。

1.2 类型转换

知识点1:
C#是类型安全的语言,允许派生类向基类隐式转换,基类向派生类必须显示转换。
using System;

namespace CSharp_Study
{
    class Program
    {
        static void Main(string[] args)
        {
            //知识点1 start
            //向基类转换允许隐式转化 向派生类转化必须显示转化
            //C#是类型安全的语言 显示转化时CLR将进行类型检查 不同类型之间无法进行转化 并抛出System.InvalidCastException
            Object o = new Test();
            Test T = (Test)o;
            Console.WriteLine(o.GetType().ToString()); //o的类型是CSharp_Study.Test
            //知识点1 end
        }
    }

	//internal 只能在程序集内访问
    internal class Test
    {
       
    }
}
知识点2:
is 和 as 操作符是常用的类型转换操作符,下面说明 is 和 as 的区别:
//is常用示例
Object o = new Object();
if (o is Object)
{
   	Test e = (Test)o;
}

//as常用示例
Test T = o as Test;
if (T != null)
{
	//...
}
操作符不同点相同点
is执行过程中会检查两次对象类型永远不会抛出异常
as执行过程中只检查一次对象类型,检查通过会返回对象引用,未通过返回null不会抛出异常,不过直接使用null会抛出System.NullReferenceException异常

1.3 命名空间

C#中命名空间的作用如下:
① 简化代码
② 减少和消除命名冲突,同一程序集中通过命名空间限制,可以存在同名函数,自定义类型等
伪代码形式如下:
namespace CSharp_Study
{
    class Test
    {
		void Operate_is_Test(Object o)
        {
            if (o is Object)
            {
                Test e = (Test)o;
            }
        }
    }
}
namespace TestNamespace
{    
    class Test
    {
        void Operate_is_Test(Object o)
        {
            if (o is Object)
            {
                Test e = (Test)o;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值