代码之家  ›  专栏  ›  技术社区  ›  CodeLikeBeaker

更新对象内部/外部方法

  •  1
  • CodeLikeBeaker  · 技术社区  · 17 年前

    可以

    请看下面的代码。我制作了一个可以复制粘贴到控制台应用程序中的程序,然后运行它来查看我在说什么。

    using System;
    
    namespace ConsoleTest
    {
        class Program
        {
            static void Main()
            {
                var o1 = new oObject
                                 {
                                     Name = "Before Method"
                                 };
    
                var o1b = new oObjectBad
                {
                    Name = "Before Method"
                };
    
                Console.WriteLine("Object Bad 1 Before: " + o1b.Name);
                oObjectBad o2b = GetNewObjectBad(o1b);
                Console.WriteLine("Object Bad 1 After: " + o1b.Name);
                Console.WriteLine("Object Bad 2 After: " + o2b.Name);
    
    
                Console.WriteLine(string.Empty);
    
                Console.WriteLine("Object 1 Before: " + o1.Name);
                oObject o2 = GetNewObject(o1);
                Console.WriteLine("Object 1 After: " + o1.Name);
                Console.WriteLine("Object 2 After: " + o2.Name);
    
                Console.ReadLine();
            }
    
            public static oObject GetNewObject(oObject o)
            {
                oObject newObject = new oObject(o);
    
                newObject.Name = "Changed in Method";
                return newObject;
            }
    
            public static oObjectBad GetNewObjectBad(oObjectBad o)
            {
                o.Name = "Changed in Method";
                return o;
            }
        }
    
        class oObject
        {
            public oObject()
            {
            }
    
            public oObject(oObject o)
            {
                Name = o.Name;
            }
    
            public string Name { get; set; }
        }
    
        class oObjectBad
        {
            public string Name { get; set; }
        }
    }
    

    现在,我不明白的是。

    当我将对象传递给方法,并更新对象属性“Name”时。然后,它更新方法之外的原始对象。

    有没有一种更简单的方法来传递一个对象并更新该对象的属性,这样我就可以在不更新原始对象的情况下得到类似的东西。

    using System;
    
    namespace ConsoleTest
    {
        class Program
        {
            static void Main()
            {
                var o1 = new oObject
                                 {
                                     Name = "Before Method"
                                 };
    
    
    
                Console.WriteLine("Object 1 Before: " + o1.Name);
                oObject o2 = GetNewObjectBad(o1);
                Console.WriteLine("Object 1 After: " + o1.Name);
                Console.WriteLine("Object 2 (New Object) After: " + o2.Name);
    
                Console.ReadLine();
            }
    
            public static oObject GetNewObjectBad(oObject o)
            {
                o.Name = "Changed in Method";
                return o;
            }
        }
    
        class oObject
        {
            public string Name { get; set; }
        }
    }
    

    编辑: 我这样做的原因是我需要在数据库中克隆一个对象,并且克隆的对象需要更改几个属性。然后,我将使用来自原始对象和新对象的ID进行其他数据处理。

    3 回复  |  直到 17 年前
        1
  •  2
  •   Lucas B    17 年前

    我会花一些时间研究“按引用传递”与“按值传递”,然后看看为什么需要在本地上下文中更改名称,而不是在原始上下文中更改名称。我怀疑你可能有一些设计缺陷。我会重新审视这个问题,看看你是否可以用不同的方法来开发一个解决方案。

        2
  •  1
  •   Kenneth Cochran    17 年前
        3
  •  1
  •   Gromer    17 年前