首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于泛型约束的有关问题

2013-09-18 
关于泛型约束的问题/// summary/// 通过对象的序列化实现对象的深拷贝/// /summary/// typeparam nam

关于泛型约束的问题


   /// <summary>
        /// 通过对象的序列化实现对象的深拷贝
        /// </summary>
        /// <typeparam name="T">对象类型</typeparam>
        /// <param name="RealObject">原始对象</param>
        /// <returns>原始对象的深拷贝</returns>
        public static T CloneObj<T>(T RealObject)
            where T : BaseElement
        {
            using (Stream objectStream = new MemoryStream())
            {
                //利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制  
                IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(objectStream, RealObject);
                objectStream.Seek(0, SeekOrigin.Begin);
                return (formatter.Deserialize(objectStream) as T);
            }
        }


函数在声明的时候指定了 where T : BaseElement  T必须派生自 BaseElement,那么 我在 方法中 还要不要判断 传递过来的参数 是不是 BaseElement类型呢??
[解决办法]
应该不需要吧?否则编译器会提示错误的。
[解决办法]
不需要。如果传入参不是显式的继承于BaseElement将会编译器报错
[解决办法]
但是要判断是否是null。
CloneObj(阿猫阿狗 as BaseElement);


这个也能通过编译
[解决办法]
泛型其实是设计时的概念,编译时的检查是泛型的优点之一。
所以,如果调用的地方传递过来的类型不符合那么编译就会报错,不会到运行时的。
[解决办法]
不需要
我装了resharper,要是加了反而会是一个warning (Redundant cast)
[解决办法]
相信我,不用!我经常用这东西
[解决办法]
参考:http://www.cnblogs.com/zhili/archive/2012/11/08/Generic_2.html

热点排行