2012-03-17 10 views
9

Robię klasy Customer że ma następujący członkowie danych i właściwości:Jak zdefiniować get i ustawić dla elementu danych tablicy?

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 
{ 
? 
} 

Jak mogę określić get i set dla elementu danych tablicy?

+0

Dokładnie tak samo. – Vache

+0

To brzmi dziwnie, że mogę uwzględnić zakupy jako część samej klasy Klienta. –

Odpowiedz

10

Można użyć automatycznego właściwość:

public class Customer 
{ 
    public string CustomerName { get; set; } 

    public double[] TotalPurchasesLastThreeDays { get; set; } 
} 

Albo jeśli chcesz:

public class Customer 
    { 
     private double[] totalPurchasesLastThreeDays; 

     public string CustomerName { get; set; } 

     public double[] TotalPurchasesLastThreeDays 
     { 
      get 
      { 
       return totalPurchasesLastThreeDays; 
      } 
      set 
      { 
       totalPurchasesLastThreeDays = value; 
      } 
     } 
    } 

a następnie w konstruktorze, można ustawić pewne wartości domyślne:

public Customer() 
{ 
    totalPurchasesLastThreeDays = new double[] { 100, 50, 250 }; 
} 
1
public double[] TotalPurchasesLastThreeDays 
{ 
get 
{ 
    return totalPurchasesLastThreeDays; 
} 
set 
{ 
    totalPurchasesLastThreeDays = value; 
} 
} 
2

Jeśli chcesz ustawić tablicę stanie z zewnątrz tak, najbardziej wygodne jest korzystanie z własności auto i po prostu usunąć pole prywatny już masz:

public double[] TotalPurchasesLastThreeDays { get; set; } 
1
public double[] TotalPurchasesLastThreeDays 
{ 
get 

    { 
    return totalPurchasesLastThreeDays; 
    } 

set 

{ 
totalPurchasesLastThreeDays=value; 
} 
} 
21

Czy chcesz się indexer?

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

W przeciwnym razie pytanie brzmi trochę dziwnie, biorąc pod uwagę, że już zaimplementowano właściwość w kodzie i oczywiście można to zrobić.

+0

+1 Nice :) Zapomniałem o indeksach. –

+4

Indeksatory nie mają nazwy, ponieważ obiekt jest bezpośrednio indeksowany. Powinieneś więc usunąć "Zakupy", aby skompilować swój kod.W rzeczywistości indeksatory działają w następujący sposób: 'myCustomer [indeks]', a nie w ten sposób: 'myCustomer.Purchases [index]' – digEmAll

+0

Zapraszam do edycji. Za każdym razem muszę sprawdzać składnię. – Joey

2

Jednym ze sposobów byłoby to (jestem przy założeniu, że punkt ten jest tak, że tablica nie można już modyfikować po ustawieniu):

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

Ale ... czy naprawdę chcesz to zrobić że? Bardziej wygodne i intuicyjne może być robienie tego samego, co zwykle.

1

Być może zadajesz sobie to pytanie, ponieważ uważasz, że przypisanie do twojej tablicy różni się od zwykłej zmiennej?

W takim przypadku musisz zdać sobie sprawę, że po wywołaniu TotalPurchasesLastThreeDays[3] = 14.0 używasz gettera, a nie settera. Seter służy do zmiany samej tablicy, a nie wartości, które zawiera. Zatem kodowanie gettera i setera nie różni się niczym w przypadku tablicy niż z jakimkolwiek innym typem zmiennej.

1

Jeśli chcesz, aby w ten sposób:

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

ale nie w ten sposób:

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

zdefiniować tylko IE getter:

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

Zamiast tego, jeśli trzeba zmienić tablica instancji spoza klasy, po prostu postępuj zgodnie z innymi odpowiedziami.

Powiązane problemy