Frage

Ich lese über Test Driven Development: Mit dem Beispiel und einem der Beispiele wird mich nervt. In Kapitel 3 (Gleichheit für alle), erstellt der Autor eine equals Funktion in der Dollar Klasse zwei Dollar Objekte vergleichen:

public boolean equals(Object object)
{
    Dollar dollar= (Dollar) object;
    return amount == dollar.amount;
}

Dann im folgende Kapitel (4: Privacy), macht er Betrag ein eigenes Mitglied der Dollar-Klasse

.
private int amount;

und die Tests bestanden. Sollte dies nicht einen Compiler-Fehler in dem equals Verfahren führen, da während des Objekt sein eigenes amount Mitglied zugreifen kann, wie es aus dem Zugriff auf das anderen Dollar Objekt amount Mitglieds beschränkt ist?

//shouldn't dollar.amount be no longer accessable?
return amount == dollar.amount

Bin ich grundsätzlich Mißverständnis private?

UPDATE Ich beschloss, zurück und Code zusammen mit dem Buch gehen manuell und wenn ich auf den nächsten Teil bekam (Kapitel 6 - Gleichheit für alle, Redux), wo sie Menge in einer übergeordneten Klasse schieben und geschützt machen, ich bin Zugang Probleme bekommen:

public class Money
{
    protected int amount;
}

public class Dollar : Money
{
    public Dollar(int amount)
    {
        this.amount = amount;
    }
    // override object.Equals
    public override bool Equals(object obj)
    {
        Money dollar = (Money)obj;
        //"error CS1540: Cannot access protected member 'Money.amount'
        // via a qualifier of type 'Money'; the qualifier must be of 
        // type 'Dollar' (or derived from it)" on the next line:
        return amount == dollar.amount;
    }
}

Bedeutet dies, dass protected IS instanz Sitz in C #?

War es hilfreich?

Lösung

Ja, du Missverständnis grundsätzlich privat. Datenschutz ist klassenspezifische, nicht instanzspezifisch.

Andere Tipps

Im Grunde Mißverständnis privat, kann Dollar jeden Dollar private Methode zugreifen, wenn sie die gleiche Klasse.

Modifier privat Klasse-private , nicht objekt privat.

In Java bedeutet private privaten Klassen. Innerhalb der Klasse, können Sie dieses Feld Zugriff in allen Instanzen der Klasse.

In Scala gibt es auch ein Objekt-privaten Rahmen, die private[this] geschrieben. Auch in anderer Hinsicht Scala Bereiche sind flexibler (siehe dieser Artikel für weitere Informationen).

Aber in Java gibt es kein Objekt-private Rahmen.

In den Sprachen der C ++ Familie (C ++, Java, C #), ist Zugriffskontrolle nur auf Klassenebene. So private ermöglicht den Zugriff auf jede Instanz dieser Klasse.

IIRC in Smalltalk Privatsphäre verhält sich wie erwartet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top