如何为数组数据成员定义get和set?

我正在创建一个具有以下数据成员和属性的类Customer

 private string customerName; private double[] totalPurchasesLastThreeDays; //array of 3 elements that will hold the totals of how much the customer purchased for the past three days ie element[0] = 100, element[1] = 50, element[2] = 250 public string CustomerName { get { return customerName; } set { customerName = value; } } public double[] TotalPurchasesLastThreeDays { ? } 

如何定义数组数据成员的get和set?

您可以使用自动属性:

 public class Customer { public string CustomerName { get; set; } public double[] TotalPurchasesLastThreeDays { get; set; } } 

或者如果你想:

 public class Customer { private double[] totalPurchasesLastThreeDays; public string CustomerName { get; set; } public double[] TotalPurchasesLastThreeDays { get { return totalPurchasesLastThreeDays; } set { totalPurchasesLastThreeDays = value; } } } 

然后在构造函数中,您可以设置一些默认值:

 public Customer() { totalPurchasesLastThreeDays = new double[] { 100, 50, 250 }; } 

你想要一个索引器吗?

 public double this[int i] { get { return totalPurchasesLastThreeDays[i]; } set { totalPurchasesLastThreeDays[i] = value; } } 

因为否则问题听起来有点奇怪,因为您已经在代码中实现了一个属性,并且显然能够这样做。

如果你想要从外面设置数组,最方便的是使用auto属性并删除你已经拥有的私有字段:

 public double[] TotalPurchasesLastThreeDays { get; set; } 

一种方法是这样的(我假设这一点是为了在设置后不再修改数组):

 public double[] TotalPurchasesLastThreeDays { get { return totalPurchasesLastThreeDays; } set { totalPurchasesLastThreeDays = (double[])value.Clone(); } } 

但是……你真的想这样做吗? 只做你通常做同样的事情可能会更方便和直观。

您可能会问自己这个问题,因为您认为分配给您的数组与常规变量不同?

在这种情况下,您必须意识到当您调用TotalPurchasesLastThreeDays[3] = 14.0您实际上使用的是getter而不是setter。 setter用于更改数组本身,而不是它包含的值。 因此,对数组进行编码getter和setter与使用任何其他变量类型没有任何不同。

如果你想允许这个:

 myCustomer.TotalPurchasesLastThreeDays[2] = 3.1415; var foo = myCustomer.TotalPurchasesLastThreeDays[1]; 

但不是这个:

 myCustomer.TotalPurchasesLastThreeDays = new Customer[]{ ... }; 

仅定义getter,即:

 public double[] TotalPurchasesLastThreeDays { get { return this.totalPurchasesLastThreeDays; } } 

相反,如果您需要从类外部更改数组实例,只需按照其他答案操作即可。

 public double[] TotalPurchasesLastThreeDays { get { return totalPurchasesLastThreeDays; } set { totalPurchasesLastThreeDays = value; } } 
 public double[] TotalPurchasesLastThreeDays { get { return totalPurchasesLastThreeDays; } set { totalPurchasesLastThreeDays=value; } } 
 public int this [int varialbeindex] { get { return totalpurchaseslastdays[index]; } set { totalpurchaseslastdays[index]=value; } }