如何在函数调用之间传递数据

时间:2014-01-06 06:20:37

标签: c# performance function class

我们可以使用类对象在函数之间传递数据。就像我上课一样

public class AddsBean
    {
      public long addId{get;set;}
      public int bid { get; set; }
      public long pointsAlloted { get; set; }
      public string userId  { get; set; }
      public enum isApproved { YES, NO };
      public DateTime approveDate { get; set; }
      public string title { get; set; }
      public string description { get; set; }
      public string Link { get; set; }
      public DateTime dateAdded { get; set; }
    }

我们可以调用像public List<AddsBean> getAdds(string Id)这样的函数。当你需要类的所有变量时,这种方法很好。 但是如果你只需要2或3个类的变量呢?

传递类的对象并不好,因为它会浪费内存。另一种可能的解决方案是制作不同类别的较小变量,但这是不实际的。

我们应该做些什么才能最好地解决问题,以达到动力和最佳表现呢?

3 个答案:

答案 0 :(得分:1)

在Java中 - “对象的引用按值传递”。所以,你不传递整个对象,只需将对象的引用传递给被调用的函数。

EG:

class A{
int i;
int j;
double k;
}

class B{
public static void someFunc(A a) // here 'a' is a reference to an object, we dont pass the object. 
{
 // some code
}
public static void main(String[] args){
A a = new A();
B.someFunc(a);  // reference is being passed by value
}
}

答案 1 :(得分:1)

首先,由于Java按值传递并且引用了类型,因此无需担心内存浪费。
接下来,正如你所提到的,如果你不需要它们就传递所有对象是不好的,在某些情况下,这是真的。因为您需要在实例中保护您的数据,因此您可以使用不同的类的粒度,例如:

class A
{id, name}
class B extends A
{password,birthday}

通过引用不同的类,您可以自己控制粒度,并为不同的客户端提供不同的数据范围。

但在某些情况下,您需要使用实例来存储整个应用程序中的所有数据,例如configure data中的hadoop或其他一些与配置相关的实例。

尝试选择最合适的范围!

答案 2 :(得分:1)

如果您确定这是问题的根源,并且您不想使用属性的子集定义新类,则.NET提供Tuple类来分组少量相关的领域。例如,Tuple<int, int, string>按顺序包含两个整数和一个字符串。

public Tuple<string, long, DateTime> GetPointsData()
{
    AddsBean bean = ... // Get your AddsBean somehow
    return Tuple.Create<string, long, DateTime>(bean.userId, bean.pointsAlloted, bean.approveDate);
}

一旦此方法超出范围,就不再对所引用的对象bean进行实时引用,并且将在未来某个时间由垃圾收集器收集。

尽管如此,除非您确定AddsBean课程的实例对您的应用程序的性能有明显的负面影响,否则您不必担心。您的应用程序的性能可能会受到其他操作的影响。返回引用类型(使用class而不是struct定义的类型)仅传递对象的引用,而不是对象本身的数据。