【问题标题】:Best OOP practise for a class returning list with class-objects?具有类对象的类返回列表的最佳 OOP 实践?
【发布时间】:2013-04-14 20:04:38
【问题描述】:

也许这是一个主观问题..但我一直在试图找出最好的方法。 一些示例代码:

class Banana
{
   private int _foo;

   public Banana()
   {
      _foo = 0;
   }
   public Banana(int whatever)
   {
      _foo = whatever;
   }

   public int Foo
   {
      ... get & set ... // get and set function
   }

   public list<Banana> MyFunction()
   {
      list myList<Banana> = new list<Banana>();

      for (int i=0; i<100; i++)
      {
         // This code?
         Banana banana = new Banana();
         banana.Foo = i;
         myList.Add(banana);

         // Or this?
         Foo = i;
         myList.Add(new Banana(Foo));
      }

      return myList;
   }
}

这有关系吗?我认为后者看起来更干净,但需要一个带值的构造函数。 或者,还有更好的方法? 提前致谢!这是 C# 代码顺便说一句:)

【问题讨论】:

  • 最适合什么?什么标准?
  • 为什么不 myList.Add(new Banana(10));那么呢?
  • 任何标准。优化(速度/内存).. 或者只是最好的编码方式
  • @GauthierG.Letellier > 好吧,工作。但是假设 Foo 是一个复杂且更长的行。这会使它的可读性降低......

标签: c# list oop class methods


【解决方案1】:

他们不这样做!

// This code?
Banana banana = new Banana();
banana.Foo = 10;
myList.Add(banana);

使用Foo = 10 创建新的Banana 实例,完全不影响当前对象

// Or this?
Foo = 10;
myList.Add(new Banana(Foo));

将当前对象 Foo 属性值更改为 10 并创建具有相同值的新 Banana 实例。

我很确定您正在寻找第一个行动。

还有第三种选择:

myList.Add(new Banana(10));

更新

第四版,使用Object Initialization语法:

Banana banana = new Banana() { Foo = 10 };
myList.Add(banana);

和第五

myList.Add(new Banana() { Foo = 10 });

【讨论】:

  • 几乎一样。第一个示例可以有一个不带参数的构造函数。
  • @Half_Baked 你没抓住重点。第二个版本修改了当前实例,第一个没有。这不是“几乎相同”。
  • @Half_Baked 看起来你还是看不出区别
  • @Filip。真的。如果添加 100 个对象,在第一个示例中我需要一个数组,否则它将在列表中出现 100 次相同的对象...
  • @Half_Baked 不,不是这样。不同的是,第二个版本修改了当前实例,而第一个没有。
猜你喜欢
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
相关资源
最近更新 更多