首页 > 解决方案 > 操作对象中数据的正确方法

问题描述

我在一个方法中创建了一个对象,我的意图是将该对象传递给另一个方法,并在传递给它的那个方法中操作对象属性的值。

例如:

 void Method1()
{
Person person = new Person();

Method2(person);

Console.WriteLine("Person's age:" + person.age);

}

void Method2(Person p){

p.age = 24;

}

现在我的问题是,这是正确的编程方式吗?或者有更好的方法来做到这一点,记住封装?

标签: c#

解决方案


我相信通过某种外部方法修改对象或让对象通过自己的方法修改自身可能有正当理由。您甚至可以使用两者的某种组合。

  • 在某些外部方法修改对象的情况下,我认为像Builder 模式这样的创建设计模式就是一个完美的例子

    • Builder 模式涉及您想要表示的一些对象(Person您的案例中的类)和一个实际执行构建所需表示的行为的对象(可能是一个PersonBuilder类)
      • 当您要表示的数据涉及更复杂的计算时,此模式是理想的
  • 在某些对象通过自己的方法修改自身的情况下,我认为某些数据应该在该类内部的对象/类,并且它公开了某些属性(可能通过支持字段)和与该数据交互的方法

    • 例如,您可能有一个Counter在内部管理计数的类,其中包含您不希望其他类违反的某些规则,因此您需要在类中管理该逻辑并仅公开某些安全的交互
public class Counter
{
    private int _count = 0;

    public Counter() {}

    public int Count
    {
        // The count can only be retrieved, not modified directly
        get { return _count; }
    }

    // We only allow interaction with our internal count variable through controlled means
    public void Increment()
    {
        ++_count;

        // We have special logic that we maintain in the Counter class and we don't want to violate it
        if (_count > 100) _count = 0;
    }
}

说了这么多,蹩脚的答案是这取决于你要解决的问题。但是,您肯定可以使用一些模式和指南来帮助您确定“适合工作的工具”。我建议研究设计模式SOLID 原则,为您提供一组 C# 开发人员通常遵循的通用指南。


推荐阅读