留步帮忙下这样定义是个什么方法 public static T CloneObject(this T obj) where T:class{}public static T CloneObject(this T obj) where T:class {var formatter = new BinaryFormatter();using(MemoryStream ms = new MemoryStream()){formatter.Se

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/25 21:47:23
留步帮忙下这样定义是个什么方法publicstaticTCloneObject(thisTobj)whereT:class{}publicstaticTCloneObject(thisTobj)whe

留步帮忙下这样定义是个什么方法 public static T CloneObject(this T obj) where T:class{}public static T CloneObject(this T obj) where T:class {var formatter = new BinaryFormatter();using(MemoryStream ms = new MemoryStream()){formatter.Se
留步帮忙下这样定义是个什么方法 public static T CloneObject(this T obj) where T:class{}
public static T CloneObject(this T obj) where T:class
{
var formatter = new BinaryFormatter();
using(MemoryStream ms = new MemoryStream())
{
formatter.Serialize(ms,obj);//写完后操作位置到了最后!
ms.Seek(0,SeekOrigin.Begin);//很重要,将流操作位置设置到起始位置
T clonedObj = (T) formatter.Deserialize(ms);
return clonedObj;
}
}

留步帮忙下这样定义是个什么方法 public static T CloneObject(this T obj) where T:class{}public static T CloneObject(this T obj) where T:class {var formatter = new BinaryFormatter();using(MemoryStream ms = new MemoryStream()){formatter.Se
这个方法涉及到两个知识点:
1)泛型
2)扩展方法
先抛开“扩展方法”不提,这个方法属于“泛型方法”(注意:不是泛型类).
以下为简单示例:
public static T ToString(T obj)
{
return obj.ToString();
}
假设调用:
ToString(2);
等效于:
public static int ToString(int obj) // 原来的 T 被替换为 int
{ return obj.ToString(); }
假设调用
ToString("MyString");
等效于:
public static string ToString(string obj) // 原来的 T 被替换为 string
{ return obj.ToString(); }
通过以上例子可以看出,泛型参数 T 其实就是一个“类型占位符”,在编译时或运行时动态的替换为实际数据类型.我想你现在可以大致理解泛型方法了吧?
最后备注:where T :class 表示约束泛型参数 T 必须是引用类型,不能是值类型.
扩展方法:
是指在某个类型上,扩展出一个方法(属于编译技术,俗称:语法糖).
CloneObject(this T obj) 意思,是指在类型 T 上扩展一个 CloneObject 方法.
这个 T 是泛型参数:
1)如果泛型参数是 string 则表示在 string 上扩展 CloneObject 方法
2)如果泛型参数是 ArrayList 则表示在 ArrayList 上扩展 CloneObject 方法
3)如果泛型参数是其它 XXXXX 类,则表示在 XXXXX 类上扩展 CloneObject 方法
以上为原理解释,实际运行效果,如一楼“风声正乱”所述,此处不再赘述.

留步帮忙下这样定义是个什么方法 public static T CloneObject(this T obj) where T:class{}public static T CloneObject(this T obj) where T:class {var formatter = new BinaryFormatter();using(MemoryStream ms = new MemoryStream()){formatter.Se 英语成语的定义帮忙用英语来为英语成语下个定义是解释英语成语。就是english idiom is...这样子。 久违 劳驾 高见 包涵 恭喜 借光 打扰 赐教 请问 留步,各用在什么场合下 对数函数中的e是怎么定义的?既然是个无理数,肯定是有什么特殊方法定义的 什么叫短路?(下个定义) 什么叫素质?下个定义 久违,劳驾,高见,请教,包涵,拜托,恭喜,借光,打扰,赐教,请问,留步分别在什么场合下 久违,劳驾,高见,请教,包涵,拜托,恭喜,借光,打扰,赐教,请问,留步,它们在什么场合下 单片机定时器初值计算方法 几种表示方法都列出来,还有一种是这样的,帮忙看下什么意思THO=-5000/256,TLO=-5000%256 说明文的各种说明方法具体是怎样辨别的,给每种说明方法下个定义,并造出例句加以说明 定义变量时后面带个括号是什么意思c++中定义一个变量int a(1);是赋初值的意思吗,定义结构体时能这样赋值吗,定义对象时这样代表什么 下个定义吧 使文章生动形象的方法有什么?这是我们的作业,是朋友帮忙下 紧凑级轿车是个什么定义? 什么叫电影,电影是什么,给电影下个定义 判 断』(1分) 定义输入文件流对象fin方法是:ofstream fin; N正确方法怎么定义,这样定义错在哪里 文艺女青年的定义总是听见说“文艺女青年”,谁能帮忙给这个词下个定义?我想,应该先说说“文艺”是什么,然后再说说“文艺”的女青年,是怎样的一个群体,哪一类可以被称为“文艺女青年 在电学中,请帮忙把电学中的中和下个定义,要求定义简短、概括,最好是大家背过的书上下的定义.(最好一句话概括一下)如果能概括完解释一下那更好了~(当然,不解释也可以,只要定义说得