Domanda

data classe A, che contiene insiemi di dati grezzi, e di classe B, che contiene una versione ri-organizzata (GUI pronto) di che i dati che vorrei rendere i dati grezzi in modo visibile in B.

Chiaramente i dati grezzi in classe A è contenuto in membri privati. Vorrei rendere visibile che i dati in B se l'uso di qualcosa di simile al metodo di classi C ++ amico.

Come posso affrontare questo?

Grazie.

È stato utile?

Soluzione

A rigor di termini, non si può definire una classe specifica (o un elenco di classi) che è possibile esporre i dati. È possibile, tuttavia, utilizzare il modificatore di accesso internal invece di private, che rende i membri disponibili a qualsiasi classe nello stesso assembly.

Detto questo, si dovrebbe con forza prendere in considerazione l'esposizione di questi membri attraverso proprietà piuttosto che i campi (che è quello che ti sto indovinando intenzione di esporre). In questo modo si consentirà la classe di definire esattamente come tali informazioni possono essere esposti ad altre classi e che cosa - se non altro -. Dovrebbe accadere quando un'altra classe cambia i dati

Altri suggerimenti

Può essere questo potrebbe aiutare ..

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

Si potrebbe definire sia in un assieme e contrassegnare i campi in A come "interno".

Un altro approccio OO è di fornire un insieme di metodi pubblici in A che permettono l'accesso ai dati (o un sottoinsieme di dati), tipicamente attraverso semplici proprietà.

A seconda della struttura si può essere in grado di utilizzare le classi parziali. Ciò significherebbe che i dati e interfaccia utente sono in realtà sia all'interno della stessa classe, ma loro hanno all'interno di file differenti.

Se questo non funziona per voi, allora hai le variabili di ambito interne come alternativa o di lavorare con set di dati che l'interfaccia utente rappresenta in modo più generico.

Il vecchio metodo (gioco di parole) sarebbe definire semplice getvalue () e setvalue () funzioni per tornare quel valore in modo che questi valori potrebbero diventare inaccessibili senza l'uso di queste funzioni, in C # queste funzioni sono predefinite membri chiamati proprietà.

class TestMethod{ 
private int Secret;

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

L'altro metodo è quello di, come altri hanno detto prima di me, basta usare il modificatore internal.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top