如何为数组数据成员定义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?
是否需要索引器?
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;
}
}