Pregunta

determinada clase A, que contiene conjuntos de datos en bruto, y la clase B, que contiene una versión re-organizada (GUI listo) de que los datos que me gustaría hacer que los datos sin procesar de manera visible en B.

Es evidente que los datos en bruto en la clase A está contenido en los miembros privados. Me gustaría hacer que los datos visibles en B mediante el uso de algo parecido al método C ++ clases amigo.

¿Cómo puedo abordar esto?

Gracias.

¿Fue útil?

Solución

En sentido estricto, no se puede definir una clase específica (o lista de clases) que se pueden exponer los datos a. Puede, sin embargo, utilizar el modificador de acceso internal en lugar de private, lo que hace que los miembros disponibles a cualquier clase en el mismo conjunto.

Una vez dicho esto, usted debe muy en cuenta la exposición de estos miembros a través de propiedades en lugar de campos (que es lo que supongo que está pensando en la exposición). Hacer esto permitirá que la clase para definir exactamente cómo esa información puede ser expuesto a otras clases y lo que - en todo caso -. Debe suceder cuando otra clase cambia los datos

Otros consejos

Puede ser que esto podría ayudarle a ..

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

Se podría definir tanto en un montaje y marcar los campos en A como "interno".

Un enfoque más OO es proporcionar un conjunto de métodos públicos en A que permiten el acceso a los datos (o un subconjunto de los datos), normalmente a través de propiedades simples.

En función de su estructura que puede ser capaz de utilizar las clases parciales. Esto significaría que los datos y la interfaz de usuario son en realidad tanto dentro de la misma clase, pero que ellos tienen dentro de los diferentes archivos.

Si eso no funciona para usted, entonces usted tiene las variables con ámbito interno como alternativa o trabajar con conjuntos de datos que representa la interfaz de usuario de una manera más genérica.

El método antiguo (nunca mejor dicho) sería definir sencilla getValue () y FijarValor () funciones para devolver ese valor para que estos valores se vuelven inaccesibles sin la uso de estas funciones, en C # estas funciones están predefinidas miembros llaman propiedades.

class TestMethod{ 
private int Secret;

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

El otro método es, como otros han dicho antes que yo, sólo tiene que utilizar el modificador internal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top