CLR Via C# 3rd 阅读摘要 -- Chapter 4 - Type Fundamentals

 All Types are Derived from System.Object

1. 所有的类型都是从System.Object继承下来的,是的,不仅仅是引用类型,值类型System.ValueType也是;

2. System.Object的方法:

[ComVisible(true), ClassInterface(ClassInterfaceType.AutoDual)]
public class Object
{
    // Methods
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
    public Object();
    public virtual bool Equals(object obj);
    public static bool Equals(object objA, object objB);
    private void FieldGetter(string typeName, string fieldName, ref object val);
    private void FieldSetter(string typeName, string fieldName, object val);
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    protected virtual void Finalize();
    private FieldInfo GetFieldInfo(string typeName, string fieldName);
    public virtual int GetHashCode();
    [MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical]
    public extern Type GetType();
    [MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical]
    internal static extern bool InternalEquals(object objA, object objB);
    [MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical]
    internal static extern int InternalGetHashCode(object obj);
    [MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical]
    protected extern object MemberwiseClone();
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
    public static bool ReferenceEquals(object objA, object objB);
    public virtual string ToString();
}

3.  看到C++中常见的邪恶关键字extern,在C#中表示什么意思呢?C#中一般用到extern是在Interop情况下,而在这里呢?

  这些extern的方法是为了执行效率、安全性或者为了实现简单等方面考虑,通过 本地代码来实现。但与Interop不同的是,不需要定义为 static extern ,也无需通过dll来导出函数来实现。这种CLR的内部调用机制,通过一个 InternalCall 的函数定义。参考:《用WinDbg探索CLR世界 [8] InternalCall 的使用与实现 

 Casting Between Types

1. 显式转化与隐式转化;

2. is 与 as操作符,编译时错误CTE与运行时错误RTE。

 Namespaces and Assemblies

1. 对CLR来说,没什么命名空间的概念,必须知道类型的完整名字;

2. 命名空间可以在引用时定义别名。 

 How Things Relate at Runtime

1. 线程栈与应用程序堆

 

 本章小结

  本章主要讲的是类型的一些基本概念,一切类型都是从System.Object继承下来了,在具体的实现中有CLR内部调用机制来进行优化,这与Python的实现有明显的不同,尤其是在内存分配的处理上,.NET显然更高效。然后说明了不同类型之间是如何转换的,以及命名空间的实现原理,命名空间与程序集之间的关系。最后说明了在运行期,CLR是如何使用线程栈和应用程序堆的,并逐步解释了程序执行过程中栈和堆的变化,以及JIT参与的情况。

 

 

 

posted @ 2010-03-18 16:15  bengxia  阅读(321)  评论(0编辑  收藏  举报
无觅相关文章插件,快速提升流量