2013-07-04 4 views
0

Я использую форму MainForm Windows, которая вызывает следующее:Связь между двумя классами с помощью формы

FileSystemLayer FSL = new FileSystemLayer(); 
DatabaseLayer DBL = new DatabaseLayer(); 

Что я хочу сделать:

(внутри класса DatabaseLayer)

String SomeString = MainForm.FSL.AnotherString; 

Проблема

FileSystemLayer FSL недоступен из-за его уровня защиты

Я попытался

public FileSystemLayer FSL = new FileSystemLayer(); 
public DatabaseLayer DBL = new DatabaseLayer(); 

Но это дало результат

несогласованной доступность: «DatabaseLayer 'менее доступно, чем Поле' MainForm.DBL '

Так что я надеюсь, что кто-то может дать мне несколько советов о том, как общаться между двумя классами.

+1

HTTP: // StackOverflow.com/questions/1665533/communication-between-two-windows-forms-in-c-sharp – Zaki

+1

Если вы создали класс DatabaseLayer Public, я думаю, что это решит проблему. Но большая проблема заключается в том, что я думаю, что вы должны прислушаться к рекомендации по ссылке выше, или в аренду передать ссылку на FSL до DBL вместо того, чтобы пытаться получить доступ к FSL из DBL после факта. Подумайте, публичный DatabaseLayer DBL = новый DatabaseLayer (FileSystemLayer fSL); – Killingsworth

ответ

0

После того, как несколько предложенных решений, которые я не смог применить, я вместо этого изменил иерархию вызова класса, как описано ниже. Благодаря тому, что люди принимают время, чтобы помочь мне в решении.

enter image description here

(Их краски Skillz)

0

Это сообщение говорит о том, что в то время как поле DBL члена основной формы объявлено как public сам тип (DatabaseLayer) объявлен как нечто иное, чем public, скорее всего, private или internal

Таким образом, вы можете решить проблему, изменив класс DatabaseLayer и сделав его public class DatabaseLayer.

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

+0

Когда я меняю класс DatabaseLayer на общедоступные, все открытые функции класса получают вместо этого сообщение об ошибке. – Robin

+0

, и когда я делаю частные функции, они не могут быть доступны из моего MainForm. – Robin

+0

. Функции класса, которые вы публикуете, должны быть помечены как общедоступные. Сам класс может быть общедоступным или внутренним. Если вы сделаете класс внутренним, чем сделайте поле DBL внутренним (а не общедоступным). –

0

Похоже, что класс DatabaseLayer определяется как внутренний, поэтому, если вы хотите, чтобы свойство этого типа было доступно публично, вы также должны определить тип (DatabaseLayer), или вы можете сделать ваше свойство менее видимым определяя его как внутреннее.

Но, как и кажется, что вы используете какое-то наслаивание, это не будет правильным путем для достижения того, что вы ищете.

Смежные вопросы