[Serializable]
[MethodImpl(MethodImplOptions.InternalCall)]
是什么意思?比如
[Serializable]
public class test{...}.net 框架里是怎么知道这个类能序列化的,.net的代码是怎么样实现的?

解决方案 »

  1.   

    属性(Attribute)是一种元信息,用于对数据集中的某个对象、方法或字段做某些声明。例如可以使用属性来定义设计时的信息(比如帮助文件、文档的链接),以及运行时的信息(比如将一个类的域与一个XML的域相关联),也可以用属性来创建“自描述”的组件(可以提供该组件的描述信息)。http://www.vckbase.com/document/viewdoc/?id=994
      

  2.   

    [Serializable] 
    就标记了这个类能进行序列化了嘛~ 将类进行实例化之后,便可将该实体进行序列化流存储了
      

  3.   

    GentleCat:你说的我明白,我现在在用reflector研究.net框架代码.我主要不知道程序里在哪段判断时候可序列化Serializable,我看到是在用obj.GetType().IsSerializable,我不知道怎么判断出来的?
      

  4.   

    你说的我明白,我现在在用reflector研究.net框架代码.我主要不知道哪段代码里判断可序列化Serializable的,我看到是在用obj.GetType().IsSerializable,我不知道怎么判断出来的? 
      

  5.   

    在反射时候能得到一个类型的attribute 如果是Serializable那么就说明这个类可以实例化
      

  6.   

    我主要不知道哪段代码里判断可序列化Serializable的,我看到是在用obj.GetType().IsSerializable,我不知道怎么判断出来的? sort of using reflection - You can get all attributes of a class, then you check any SerializableAttribute.
    Here is simplified example:
            [Serializable]
            class A
            {
            }
            class B
            {
            }
            private void button1_Click(object sender, EventArgs e)
            {
                A a = new A();
                B b = new B();            bool r1 = MyIsSerializable(a.GetType());                   //true
                bool r2 = MyIsSerializable(b.GetType());                   //false
            }
            bool MyIsSerializable(Type t)
            {
                foreach (object o in t.GetCustomAttributes(false))         //get all attributes of the type
                {
                    if( o is System.SerializableAttribute ) return true;   //check whether there is a SerializableAttribute 
                }
                return false;
            }
      

  7.   

    [MethodImpl(MethodImplOptions.InternalCall)]
    什么意思啊?
      

  8.   

    这篇文章 http://dev.csdn.net/article/33/33898.shtm 有讲[MethodImpl(MethodImplOptions.InternalCall)] 
      

  9.   

       特性就是元数据,在.net加载程序集创建对象时,.net要浏览元数据,在编译器内内置了很多的特性,当然在你编写代码的时候你不会看到,但他确实存在,内置的原因是因为这些特性是所有对象必须满足的。
       还有一些特性是需要自己在编码的时候加上去来表示你想让这个类或者方法或者字段拥有的特殊元数据,.net这样做是因为它不知道这些元数据是否是用户所必须的,比如说serializable 特性,因为.net默认所有的类都不是可序列化的,因此你想让自己类可以序列化的话,需要加上此特性。
       至于.net是如何来序列化的,这是开发.net的程序员的事情,这些事情和我们无关,我们无需知道,.net的程序员也不会让我们知道,因为.net不是开源的,所以不要再去想这些只有.net的程序员知道的事情了