Próbuję przekazać obiekt (w zasadzie odniesienie do aktualnie zalogowanego użytkownika) między dwiema postaciami. W tej chwili mam coś takiego w formularzu logowania:
private ACTInterface oActInterface;
public void button1_Click(object sender, EventArgs e)
{
oActInterface = new ACTInterface(@"\\actserver\Database\Premier.pad",this.textUser.Text,this.textPass.Text);
if (oActInterface.checkLoggedIn())
{
//user has authed against ACT, so we can carry on
clients oClientForm = new clients(oActInterface);
this.Hide();
oClientForm.Show();
}
else...
w następnym formularzu (klienci) mam:
public partial class clients : Form
{
private ACTInterface oActInt {get; set;}
public clients(ACTInterface _oActInt)
... co powoduje, że dostaję:
Error 1 Inconsistent accessibility:
parameter type 'support.ACTInterface' is less accessible than method
'support.clients.clients(support.ACTInterface)'
c:\work\net\backup\support\support\clients.cs 20 16 support
Naprawdę nie rozumiem na czym polega problem - oba pola są prywatne i są dostępne za pomocą odpowiedniej metody publicznej z formularza. Googling tak naprawdę nie pomaga, ponieważ wskazuje tylko, że jeden element jest publiczny, a drugi prywatny, co nie jest tutaj prawdą.
Czy ktoś pomaga?
Upublicznij klasę.
jest taki sam jak:
więc klasa musi być publiczna
źródło
Jeśli brzmi jak typ,
ACTInterface
nie jestpublic
, ale korzysta z domyślnej dostępności albointernal
(jeśli jest na najwyższym poziomie) lubprivate
(jeśli jest zagnieżdżony w innym typie).Podanie typu
public
modyfikator to naprawi.Innym podejściem jest wykonanie zarówno typu, jak i metody
internal
, jeśli taki jest twój zamiar.Problemem nie jest dostępność pola (
oActInterface
), aleACTInterface
sam typ .źródło
Jaka jest dostępność tego typu
support.ACTInterface
. Błąd sugeruje, że nie jest publiczny.Nie można ujawnić podpisu metody publicznej, gdy niektóre typy parametrów podpisu nie są publiczne. Nie byłoby możliwe wywołanie metody z zewnątrz, ponieważ program wywołujący nie mógł skonstruować wymaganych parametrów.
Jeśli podasz do
support.ACTInterface
publicznej wiadomości, usunie ten błąd. Alternatywnie, jeśli to możliwe, zmniejsz dostępność metody formularza.źródło
Problem nie wydaje się dotyczyć zmiennej, ale raczej deklaracji interfejsu ACTI. Czy ACTInterface jest przez przypadek zadeklarowany jako wewnętrzny?
źródło
Gdy otrzymałem ten błąd, miałem klasę „pomocnika”, której nie zadeklarowałem jako publiczną, co spowodowało ten problem w klasie, która korzystała z klasy „pomocnika”. Upublicznienie klasy „pomocnika” rozwiązało ten błąd, jak w:
public ServiceClass {public ServiceClass (HelperClass _helper) {}}
HelperClass klasy publicznej {} // Zwróć uwagę na publiczny HelperClass, który rozwiązał mój problem.
Może to pomóc komuś, kto się z tym spotka.
źródło
Błąd mówi „support.ACTInterface” jest mniej dostępny, ponieważ ustawiłeś interfejs jako prywatny, przynajmniej uczyń go wewnętrznym lub publicznym.
źródło
Możesz uzyskać parametr (klasa o mniejszej dostępności), a
object
następnie przekonwertować go na klasę wedługas
słowa kluczowego.źródło
Jeśli ten błąd występuje, gdy chcesz użyć zmiennej klasy w nowej formie, powinieneś umieścić definicję klasy w
zamiast pliku Formname.cs.
źródło
Po zaktualizowaniu modelu szkieletu encji znalazłem ten błąd, który zainfekował kilka plików w moim rozwiązaniu. Po prostu kliknąłem prawym przyciskiem myszy plik .edmx i plik TT, a następnie kliknąłem „Uruchom narzędzie niestandardowe”, co znowu mnie przywróciło po ponownym uruchomieniu programu Visual Studio 2012.
źródło
Spróbuj ustawić swojego konstruktora jako prywatny:
źródło