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

本文关键字:get set 定义 数据成员 数组 | 更新日期: 2023-09-27 18:28:03

我正在创建一个具有以下数据成员和属性的类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 i.e. element[0] = 100, element[1] = 50, element[2] = 250
public string CustomerName
{
get { return customerName; }
set { customerName = value; }
}
public double[] TotalPurchasesLastThreeDays
{
?
}

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

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

是否需要索引器?

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

因为在其他方面,这个问题听起来有点奇怪,因为你已经在代码中实现了一个属性,并且显然有能力这样做

您可以使用自动属性:

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 };
}

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

在这种情况下,您必须意识到,当您调用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; }
}

相反,如果您需要从类外更改数组实例,只需遵循其他答案即可。

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

public double[] TotalPurchasesLastThreeDays { get; set; }

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

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

但是。。。你真的想那样做吗?和平时做同样的事情可能会更方便、更直观。

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