c#copy构造函数生成器

前端之家收集整理的这篇文章主要介绍了c#copy构造函数生成器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将值从一个对象复制到另一个对象.类似于传递值但具有赋值的东西.

例如:

PushPin newValPushPin = oldPushPin; //I want to break the reference here.

有人告诉我为此写一个拷贝构造函数.但是这个类有很多属性,手工编写复制构造函数可能需要一个小时.

>有没有更好的方法通过值将对象分配给另一个对象?
>如果没有,是否有复制构造函数生成器?

注意:Silverlight中不提供ICloneable.

解决方法

如果可以将要克隆的对象标记为Serializable,则可以使用内存中序列化来创建副本.检查以下代码,它的优点是它也适用于其他类型的对象,并且每次添加,删除或更改属性时都不必更改复制构造函数或复制代码
class Program
    {
        static void Main(string[] args)
        {
            var foo = new Foo(10,"test",new Bar("Detail 1"),new Bar("Detail 2"));

            var clonedFoo = foo.Clone();

            Console.WriteLine("Id {0} Bar count {1}",clonedFoo.Id,clonedFoo.Bars.Count());
        }
    }

    public static class ClonerExtensions
    {
        public static TObject Clone<TObject>(this TObject toClone)
        {
            var formatter = new BinaryFormatter();

            using (var memoryStream = new MemoryStream())
            {
                formatter.Serialize(memoryStream,toClone);

                memoryStream.Position = 0;

                return (TObject) formatter.Deserialize(memoryStream);
            }
        }
    }

    [Serializable]
    public class Foo
    {
        public int Id { get; private set; }

        public string Name { get; private set; }

        public IEnumerable<Bar> Bars { get; private set; }

        public Foo(int id,string name,params Bar[] bars)
        {
            Id = id;
            Name = name;
            Bars = bars;
        }
    }

    [Serializable]
    public class Bar
    {
        public string Detail { get; private set; }

        public Bar(string detail)
        {
            Detail = detail;
        }
    }

猜你在找的C&C++相关文章