Вопрос

Учитывая класс A, который содержит наборы необработанных данных, а класс B, который содержит реорганизованную версию (GUI готово) этих данных, которые я хотел бы сделать необработанные данные в видимом в B.

Очевидно, что необработанные данные в классе A содержатся в частных членах. Я хотел бы сделать эти данные, видимые в B, хотя использование чего-то похожего на метод классов друзей C ++.

Как я могу подойти к этому?

Спасибо.

Это было полезно?

Решение

Строго говоря, вы не можете определить определенный класс (или список классов), которые вы можете разоблачить данные. Вы можете, однако, использовать internal модификатор доступа вместо private, что делает члены доступными для любого класса в той же сборке.

Что говорится, вы должны сильно Подумайте о том, чтобы разоблачить этих членов через свойства, а не поля (что в том, что я предполагаю, что вы планируете разоблачить). Это позволит классу определить именно то, как эта информация может подвергаться воздействию других классов и что-то - если что-то - должно произойти, когда другой класс меняет данные.

Другие советы

Может быть, это может помочь вам ..

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

Вы можете определить как на сборке, так и отмечать поля в «внутреннем».

Более более подход OO состоит в том, чтобы обеспечить набор публичных методов в A, который позволяет доступ к данным (или подмножению данных), как правило, через простые свойства.

В зависимости от вашей структуры, вы можете использовать частичные классы. Это означало бы, что данные и интерфейс на самом деле находятся как в одном классе, но у вас есть их в разных файлах.

Если это не сработает для вас, то у вас есть внутренние определенные переменные в качестве альтернативы или работают с наборами наборах, которые пользовательский интерфейс представляет более общей способ.

Старый метод (каламбур) будет определить просто GetValue () а также SetValue () Функции для возврата этого значения, чтобы эти значения станут недоступными без использования этих функций, в C # эти функции представляют собой предопределенные элементы, называемые свойствами.

class TestMethod{ 
private int Secret;

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

Другой метод заключается в том, что, поскольку другие заявили до меня, просто используйте internal модификатор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top