此处简单描述下new操作符所做工作:
① 计算类型以及所有基类型所需的字节数(包括类型对象指针和同步块索引)。
② 根据计算好的字节数为对象实例分配内存,并初始化为0。
③ 初始化对象的类型对象指针和同步块索引
④ 调用实例构造器 ,传递new调用中指定的参数,构造器只初始化自身类型的实例字段,基类字段由基类构造器调用(一般调用基类构造器的代码都由编译器自动生成),System.Object的构造器不做任何工作,简单返回 。
1.2 类型转换
知识点1:
C#是类型安全的语言,允许派生类向基类隐式转换,基类向派生类必须显示转换。
usingSystem;namespaceCSharp_Study{classProgram{staticvoidMain(string[] args){//知识点1 start//向基类转换允许隐式转化 向派生类转化必须显示转化//C#是类型安全的语言 显示转化时CLR将进行类型检查 不同类型之间无法进行转化 并抛出System.InvalidCastExceptionObject o =newTest();Test T =(Test)o;
Console.WriteLine(o.GetType().ToString());//o的类型是CSharp_Study.Test//知识点1 end}}//internal 只能在程序集内访问internalclassTest{}}
知识点2:
is 和 as 操作符是常用的类型转换操作符,下面说明 is 和 as 的区别:
//is常用示例Object o =newObject();if(o isObject){Test e =(Test)o;}//as常用示例Test T = o asTest;if(T !=null){//...}
C#中命名空间的作用如下:
① 简化代码
② 减少和消除命名冲突,同一程序集中通过命名空间限制,可以存在同名函数,自定义类型等
伪代码形式如下:
namespaceCSharp_Study{classTest{voidOperate_is_Test(Object o){if(o isObject){Test e =(Test)o;}}}}namespaceTestNamespace{classTest{voidOperate_is_Test(Object o){if(o isObject){Test e =(Test)o;}}}}