Frage

Bei der Klasse A, die Sätze von Rohdaten enthält, und die Klasse B, die eine reorganisierte Version enthält (GUI bereit) diese Daten Ich mag würde die Rohdaten in A sichtbar in B machen.

Klar, dass die Rohdaten in der Klasse A ist in der privaten Mitglieder enthalten. Ich mag, dass die Daten in B sichtbar machen, obwohl die Verwendung von so etwas wie die C ++ Klassen Freund Methode.

Wie kann ich diesen Ansatz?

Danke.

War es hilfreich?

Lösung

Genau genommen, kann man nicht eine bestimmte Klasse (oder Klassenliste) definieren, die Daten belichten kann. Sie können jedoch, verwenden Sie den internal Zugriffsmodifikator statt private, die den Mitgliedern zur Verfügung zu jeder Klasse in der gleichen Assembly macht.

That being said, sollten Sie stark betrachten aussetzt diese Elemente durch Eigenschaften eher als Felder (was ich vermute, Sie planen, auf Belichtung). Dadurch wird die Klasse erlaubt, genau zu definieren, wie diese Informationen auch auf andere Klassen und was ausgesetzt werden - wenn überhaupt -. passieren soll, wenn eine andere Klasse, die Daten ändert

Andere Tipps

Kann dies könnte Ihnen helfen ..

public class A
{
    public A() { }

    public string AccessData(object accessor)
    {
        if (accessor is B)
            return "private_data";
        else
            throw new UnauthorizedAccessException();
    }
}

public class B
{
    public B() { }

    private void AccessDataFromA()
    {
        Console.WriteLine(new A().AccessData(this));
    }
}

Sie können sowohl in einer Baugruppe definieren und die Felder in A als „intern“ markieren.

Ein OO Ansatz ist es, eine Reihe von öffentlichen Methoden in A zur Verfügung zu stellen, die der Zugriff auf die Daten (oder eine Teilmenge der Daten) ermöglichen, in der Regel über einfache Eigenschaften.

auf Ihrer Struktur Je können Sie in der Lage sein, Teilklassen zu verwenden. Dies würde bedeuten, dass die Daten und Benutzeroberfläche sind eigentlich beide innerhalb der gleichen Klasse, aber Sie haben sie in verschiedenen Dateien.

Wenn das nicht für Sie arbeiten, dann haben Sie interne scoped Variablen als Alternative bekam oder die Arbeit mit Datasets, dass die Benutzeroberfläche in eine allgemeinere Art und Weise darstellt.

Die alte Methode (pun intended) wäre einfach zu definieren getvalue () und setvalue () Funktionen diesen Wert zurück, so dass diese Werte ohne die nicht mehr zugegriffen werden würde Verwendung dieser Funktionen in C # diese Funktionen sind vordefinierte Elemente Eigenschaften genannt.

class TestMethod{ 
private int Secret;

get { return Secret;}
set { Secret = value;}
}

Die andere Methode ist, wie andere vor mir gesagt haben, benutzen Sie einfach den internal Modifikator.

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