关于c#的属性

happyie 2008-07-03 11:13:27

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

比如
[Serializable]
public class test{...}

.net 框架里是怎么知道这个类能序列化的,.net的代码是怎么样实现的?
...全文
185 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gomoku 2008-07-03
  • 打赏
  • 举报
回复
我主要不知道哪段代码里判断可序列化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;
}
GhostAdai 2008-07-03
  • 打赏
  • 举报
回复
有回音~有回音~~有回音~~~
fuadam 2008-07-03
  • 打赏
  • 举报
回复
在反射时候能得到一个类型的attribute 如果是Serializable那么就说明这个类可以实例化
happyie 2008-07-03
  • 打赏
  • 举报
回复
你说的我明白,我现在在用reflector研究.net框架代码.我主要不知道哪段代码里判断可序列化Serializable的,我看到是在用obj.GetType().IsSerializable,我不知道怎么判断出来的?
happyie 2008-07-03
  • 打赏
  • 举报
回复
GentleCat:

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

GentleCat 2008-07-03
  • 打赏
  • 举报
回复
[Serializable]
就标记了这个类能进行序列化了嘛~

将类进行实例化之后,便可将该实体进行序列化流存储了
halk 2008-07-03
  • 打赏
  • 举报
回复
属性(Attribute)是一种元信息,用于对数据集中的某个对象、方法或字段做某些声明。例如可以使用属性来定义设计时的信息(比如帮助文件、文档的链接),以及运行时的信息(比如将一个类的域与一个XML的域相关联),也可以用属性来创建“自描述”的组件(可以提供该组件的描述信息)。

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

fuadam 2008-07-03
  • 打赏
  • 举报
回复
这篇文章 http://dev.csdn.net/article/33/33898.shtm 有讲[MethodImpl(MethodImplOptions.InternalCall)]
happyie 2008-07-03
  • 打赏
  • 举报
回复
happyie 2008-07-03
  • 打赏
  • 举报
回复
[MethodImpl(MethodImplOptions.InternalCall)]
什么意思啊?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧