早教吧 育儿知识 作业答案 考试题库 百科 知识分享

留步帮忙下这样定义是个什么方法 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;
}
}
▼优质解答
答案和解析
这个方法涉及到两个知识点:
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 方法
以上为原理解释,实际运行效果,如一楼“风声正乱”所述,此处不再赘述.
看了 留步帮忙下这样定义是个什么方...的网友还看了以下:

英语高手请帮忙50分帮忙翻译,请留意冰箱的门是否已关好果然很有速度,请再帮个忙,请随手把冰箱门关好  2020-04-09 …

大家可以帮我一个忙.可以帮我分析一下朱自清的《匆匆》吗?分析一下文章里的修辞.请帮我这个忙.对了,  2020-06-17 …

亲爱的朋友们,帮帮忙啦,帮我翻译个英文歌曲,拜托啦~~很喜欢《TheSaltwaterRoom》--  2020-11-02 …

两个数相除,商位26,余数9,被除数加除数和是333,被除数是几谢谢了,大神帮忙啊请帮帮忙,  2020-11-17 …

以“北京奥运畅想”为题找一篇900左右初中水平的文章谢谢大家帮忙大家帮帮忙吧作文马上就要交了谢谢呀  2020-11-22 …

以“北京奥运畅想”为题找一篇900左右初中水平的文章谢谢大家帮忙大家帮帮忙吧作文马上就要交了谢谢呀  2020-11-22 …

英语好的请帮忙了请帮忙翻译一下下面几个句子.1.请您收好它.(用于给对方一件东西时说的)2.我要把这  2020-11-23 …

求助帮忙翻译帮忙将如下翻译成英文:DearKenny:非常感谢您和YTD的帮忙,这样品对我们的展会有  2020-11-27 …

帮忙把以下的翻译为英文就这么多帮忙下我帮人翻译这些不太会找人帮忙翻译下其实一直只是我不敢说而已也许我  2020-12-12 …

用一个字或者两个字的词组代替力量和敏锐和高贵霸气用一个字或者两个字的词组代替力量和敏锐和高贵霸气谢谢  2020-12-13 …